并查集
luckyone2014
想思路是苦涩艰辛的,但是打代码是愉快的。
展开
-
ZOJ 3811 Untrusted Patrol 并查集+邻接表,注意所有点都要走过
n个点,m条边,k个点有报警器,每个报警器经过后报警一次就不能再使用。L次报警,接下来L个数字是一次次的报警顺序保安每经过一个报警器,报警器就报一次警;判断保安在这种报警顺序下,有没有可能已经把所有的点都走过了一遍。可能yes 不可能no;原创 2014-09-09 16:15:14 · 1144 阅读 · 0 评论 -
HDU 4786 Fibonacci Tree 并查集+生成树=kruskal
一个生成树构造成另一个生成树,可以不断的去边又加边来完成。 而这题全部边权为0,1,所以加边去边过程是+1 +1 的;可以求出生成树 最大边权和 ,及最小的边权和。 然后枚举24个 小于100000的斐波那契数。如果无法成树,那直接可以判断是no的;只要有某个斐波那契数 fb, fb<=最大边权和&&fb>=最小边权和 那就是可以构成这样一颗树的;原创 2014-11-09 19:47:06 · 842 阅读 · 0 评论 -
poj 1182 食物链 种类并查集
动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。 现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。 有人用两种说法对这N个动物所构成的食物链关系进行描述: 第一种说法是"1 X Y",表示X和Y是同类。 第二种说法是"2 X Y",表示X吃Y。原创 2015-01-29 15:50:47 · 675 阅读 · 0 评论 -
hdu 4496 D-City 并查集
题意:给你 n个点 m条边,首先边是都建好了的。 然后删一条边,然后问你当前图里有几个团。做法:倒着做,起始5个点 ,5个团,每次先输出几个团。 然后开始并那两个给出的点,用并查集,然后find找到的祖先如果不同,那么就是有两个团并掉了。就把总的团数-1。 如果两个点 find 返回值相同 就是这两个点本来就是在一个团里的,就不用处理。每次先输出当前有几团再并。原创 2015-05-09 21:19:25 · 686 阅读 · 0 评论 -
hdu 1811 Rank of Tetris 并查集+拓扑排序
做法:把等于的用并查集放一起,找出最小的数,也就是入度为零的数。然后开始拓扑,拓扑就是每次把入度为0,也就是剩下点中最小的数拿来,再把它的上一个入度减掉。如果有点没访问,就是说明有环,说明矛盾。如果队列同时有两个点在,说明这两个点大小关系不明,不明确。原创 2015-07-10 14:42:18 · 680 阅读 · 0 评论 -
hdu 4424 Conquer a New Region 并查集+思维
题意: 树形结构,选出一个点,这个点到任何一个其他点 路径上 的最小边权 最大的 和是多少。做法:根据边权排序, 每次合并最大边权的两个点。 两个点各在一个集合,dian表示这个集合有多少点,dis表示这个集合内部 某个点 到其他所有点的 路径上的 最小边权 的最大和。u_是u 所在集合的祖先,如果以u_为合并后的祖先,那么把dian[u_]更新为两个集合的点和,当前枚举的边肯定比之前的边要小,所以 dis[u_] = dian[v_]*w+dis[u_]。把 以v_为祖先 所得的 答案作比较, 取答原创 2015-10-11 09:18:03 · 950 阅读 · 0 评论