hdu1856--------------并查集+树
摘要:一次AC,受宠若惊啊!呵呵,一看数据1<=n<=10000000,感觉有点大,很担心超时。题目要求求出最大集合的元素个数。思想是并查集,不会错。有人用了压缩路径的方法,我估计他也是怕在最后遍历时,求元素的根超时。我不太熟悉压缩路径,就在另设置了一个数组root[10000000], 用来存储以 i 为根的集合的元素个数。这样一来,在每次合并两棵树时,将两棵数的集合元素个数相加存放在 root[i]中。并设置全局变量 max,每次将新树的元素个数与 max 比大小。 最后输出 max 即为结果。 342AC代码:#include<stdio.h>int set[10000
阅读全文
posted @
2012-03-10 12:27
hrbust_09zhangyabin
阅读(190)
推荐(0)
hdu1829------------------并查集
摘要:题目大意:Hopper教授正在研究一种稀有虫子的交配行为。他假设它们有两种性别并且它们只与异性交配。在他的实验中,很容易识别虫子和它们的交配行为,因为虫子背后印有编号。问题给定一组虫子的交配行为,确定实验是支持教授的假设即虫子没有同性恋,还是有部分交配行为不符合假设。这道题实际上还是并查集,和以往不同的是。以往给出两个元素的关系,然后认为这两个元素有联系,把它们划归为同一个集合。 最后看看能划分出多少个不同的集合。本道题,可以认为有两个集合,异性和同性。给出关系,希望你检查这两个集合有没有连接,即有没有同性恋。大体思路: ‘合并’操作, ‘查找’操作不变。设置一个sex[] 数组,sex[i]
阅读全文
posted @
2012-03-10 10:58
hrbust_09zhangyabin
阅读(823)
推荐(0)
hdu1272---------------------并查集 + 判联通
摘要:这道题给出了一些点和边的信息,让你判断是否能够组成一个无环的联通集合,且这个唯一的集合可以为空。你需要做:1,判是否成环, 只要输入的边的两个点有共同的父节点,那么着两个点就成环了。2,判联通,只要最后判断根节点的总数为1即可。这道题花了我一上午,WA了5次。前两次是我不知道判联通,该! 后几次是太粗心了,初始化该写100000,却写成了10000! 累死我了,怎么也找不出原因!唉,悲剧啊注意若只输入0 0,则输出YesAC代码:#include<stdio.h>int set[100005];int flag[100005];int temp;int find(int x){in
阅读全文
posted @
2012-03-09 13:56
hrbust_09zhangyabin
阅读(234)
推荐(0)
lig1073------------------------第二道并查集
摘要:这道题和上一道很类似。第一道会了,第二道很快就AC了!不同的是,上一道是找有多少个不相交集合。 求集合的数量。 这一道是求某个确定集合中的元素个数。不难,中间遇到的一个小麻烦,是因为对基础概念理解不深。http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1073AC代码:#include<stdio.h>int set[50005];int find(int x){int r;r=x;while(set[r]!=r)r=set[r];return r;}void merge
阅读全文
posted @
2012-03-08 21:50
hrbust_09zhangyabin
阅读(136)
推荐(0)
hdu1232-------------------------简单并查集
摘要:题意:某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M;随后的M行对应M条道路,每行给出一对正整数,分别是该条道路直接连通的两个城镇的编号。为简单起见,城镇从1到N编号。 注意:两个城市之间可以有多条道路相通,也就是说3 31 21 22 1这种输入也是合法的当N为0时,输入结束,该用例不被处理。对每
阅读全文
posted @
2012-03-08 21:45
hrbust_09zhangyabin
阅读(125)
推荐(0)