并查集
飘过的小牛
不停成长才会洞悉成功的奥妙,fighting!
展开
-
POJ-2524 Ubiquitous Religions
题目链接:http://poj.org/problem?id=2524题目大意:一个学校有N个学生,他们都有1个宗教信仰,现在想知道这N个学生共有多少个不同的宗教信仰。解题思路:很裸的并查集,判断强连通分量的个数,然后用N个宗教信仰减去结点个数(这个宗教全部减去),然后+1(表示他们共同的宗教信仰)。代码如下:#include#include#include#原创 2011-11-16 15:50:13 · 1847 阅读 · 0 评论 -
Hdu-1162 Eddy's picture
题目链接:题目大意:给你一些点的坐标,然后求连通这些点的最小线段的长度。解题思路:其实也就是最小生成树的裸题。只不过需要对这n个点全部处理一下,求出每对点之间的长度,然后存入邻接矩阵。然后就KO了。。这道题悲剧的地方在于最大值赋值的时候出现了错误,在比赛里提交编译错误,在外面提交就AC了。问了N个人也没能解决。原来是最大值越界了。以后要用#include里面的I原创 2011-10-28 18:07:51 · 1773 阅读 · 0 评论 -
Hdu-1856 More is better
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1856题目大意:就是给你一些树,找出结点数目最多的树。解题思路:并查集的简单应用。开一个boy数组,记录每个结点的子结点个数,如果两棵树合并,则把另一棵树的子结点加在这棵树上即可。需要注意的就是maxboy的初始化,刚开始初始化为0,悲剧了半天。。如果n=0,则至少还有一原创 2011-10-27 21:22:58 · 1450 阅读 · 0 评论 -
Hdu-3926 Hand in Hand
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3926题目大意:给你2个图,最大度为2.问两个图是否相似解题思路:本质是并查集,但是细节是在是恶心死人了。。。1.最大度为2.说明这个图可能有多个连通分量,每个连通分量要么是环,要么是链。2.然后遍历每个连通分量,记录该连通分量的结点个数,以及该连通分量是环还是链。3.将第一个图原创 2011-10-29 13:49:11 · 2988 阅读 · 1 评论 -
Hdu-3371 Connect the Cities
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3371题目大意:给你很多条边,包括顶点和权值。再给你一些点,表示这些点已经有图连通,求最小生成树的权值之和。解题思路:将后来的连通的边的权值设定为0就可以了。就是比较裸的最小生成树。。。但是细节处理比较麻烦,我就是处理后来那些连通顶点花了很长时间,而且是卡过去了。。题目要求1s。我968ms原创 2011-10-28 17:25:04 · 1731 阅读 · 0 评论 -
POJ-2236 Wireless Network
题目链接:http://poj.org/problem?id=2236题目大意:给你N台电脑,从1-N。一个数字,表示两台计算机的最大通信距离,超过这个距离就无法进行通信。然后分别告诉这些电脑的坐标,接下来有两种操作,第一种O表示这点电脑修好,第二种S,表示测试这两台电脑能不能进行正常的通信解题思路:并查集的简单应用,对每次修好的电脑对其它已经修好的电脑遍历,如果距离小于等原创 2011-11-18 15:16:50 · 6879 阅读 · 1 评论 -
HDU-3635 Dragon Balls
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3635题目大意:初始时,有n个龙珠,编号从1到n,分别对应的放在编号从1到n的城市中。现在又2种操作:T A B,表示把A球所在城市全部的龙珠全部转移到B城市。(第一次时,因为A球所在的城市只有一个球,所以只移动1个,如果有多个,则全部移动)。Q A,表示查询A。要求得到的信原创 2011-11-19 10:20:59 · 4612 阅读 · 1 评论 -
POJ-1988 Cube Stacking
题目链接:http://poj.org/problem?id=1988题目大意:给你编号从1到30000的大小相同的立方体,现在我有2种操作:1.move 1,3表示把1放在3的上面。还有一种情况是:假如1的下面还有一个2,3的下面还有一个4,那么move1,3的意思就是把1所在的全部立方体放在3全部立方体的上面,而且保持原来1和3所在堆的立方体的顺序。移动后从上到下依次为1,2,原创 2011-11-18 12:12:28 · 2531 阅读 · 0 评论 -
POJ-1703 Find them, Catch them
题目链接:http://poj.org/problem?id=1703题目大意:在Tadu城市里面有2个犯罪团伙,罪犯都属于这两个团伙。现在给你2个罪犯,判断他们是不是一个犯罪团伙。如果当前关系不确定,就输出not sure yet.解题思路:并查集的应用,很A bug's life基本一样。。。。秒之。但纠结了半个小时的地方竟然是输出看错了,同一个团伙是gang,不是gang原创 2011-11-18 09:09:39 · 1795 阅读 · 0 评论 -
POJ-2492 A Bug's Life
题目链接:http://poj.org/problem?id=2492题目大意:给你n个bug和m个他们之间的信息。如给出1和3,表示1喜欢3。当然给出的说明他们是异性。判断有没有出现一种情况,比如1喜欢2,2喜欢3,1又喜欢3,这明显是矛盾,1和2性别不同,2和3性别不同,那么1和3性别肯定相同,如果1喜欢3,则是同性,矛盾出现。。。题目就是判断有没有矛盾出现。。。。。。。解题思原创 2011-11-17 16:18:46 · 1656 阅读 · 0 评论 -
POJ-1611 The Suspects
题目链接:http://poj.org/problem?id=1611题目大意:有一个学校,有N个学生,编号为0-N-1,现在0号学生感染了非典,凡是和0在一个社团的人就会感染,并且这些人如果还参加了别的社团,他所在的社团照样全部感染,求感染的人数。解题思路:并查集的变种,实质就是求0所在的强连通图的结点数目。这道题纠结在数据的输入上,他只是告诉你哪些学生是同一原创 2011-11-16 15:31:37 · 5305 阅读 · 0 评论 -
POJ-1182 食物链
题目链接:http://poj.org/problem?id=1182解题思路:这道题是并查集题目中的经典。。。而且比普通并查集提高了一个档次,下面在基础并查集的前提上讲解并查集的真正用法。基础回顾:find()函数找根结点的两种写法如下:第一种递归:int find(int x){ return x == pre[x] ? x : find(pre[x]);}原创 2011-11-17 14:23:20 · 26913 阅读 · 60 评论