并查集
kalilili
双眼闭三年。
展开
-
并查集的两个优化(秩优化+路径压缩)
路径压缩寻找祖先时采用递归,但是一旦元素一多起来,或退化成一条链,每次GetFather都将会使用O(n)的复杂度,这显然不是我们想要的。对此,我们必须要进行路径压缩,即我们找到最久远的祖先时“顺便”把它的子孙直接连接到它上面。这就是路径压缩了。使用路径压缩的代码如下,时间复杂度基本可以认为是常数的。路径压缩可以采用迭代和递归方式递归方式实现简单但是有些题目会爆栈的原创 2015-01-22 08:44:34 · 9512 阅读 · 5 评论 -
HDU 4313 Matrix (贪心+并查集)
题意:给你一个有n(2思路:正着思考的确不好入手,反着思考,让机器人不能互达,所以独立成一个集合,可以用并查集,然后模拟加边,若加上的边让机器人互连那么就删去这条边,可见,让删去的边越短越好,所以尽可能先添加长边。//2776 KB 218 ms#include#include#include#includeusing namespace std;struct node{原创 2015-02-17 23:52:35 · 606 阅读 · 0 评论 -
HDU 3635 Dragon Balls(并查集--路径压缩拓展应用)
题目大意:初始时,有n个龙珠,编号从1到n,分别对应的放在编号从1到n的城市中。现在又2种操作:T A B,表示把A球所在城市全部的龙珠全部转移到B城市。(第一次时,因为A球所在的城市只有一个球,所以只移动1个,如果有多个,则全部移动)。Q A,表示查询A。要求得到的信息分别是:A现在所在的城市,A所在城市的龙珠数目,A转移到该城市移动的次数(如果没有移动就输出0)思路:并原创 2015-03-14 23:12:08 · 614 阅读 · 0 评论 -
HDU 1272 小希的迷宫(并查集)
题意:判一个无向图无环且处处连通思路:并查集,trap 可能直接输入0 0而且....合并的时候按某一个方向会爆栈,爆了好几次...下次考虑一下直接递归找祖先吧#include#include#include#includeusing namespace std;const int N =1e5+1e2;int fa[N];int getf(int x){ re原创 2015-03-15 00:39:01 · 646 阅读 · 0 评论 -
HDU 1811 Rank of Tetris(拓扑排序+并查集)
本题的主要问题就是给定m个名次大小关系,问每个人的名次是否能确定下来。这个问题可以用topsort解决,名次发生冲突即找不到topsort结果。由于关系太少导致的名次不能确定直接在topsort过程中检测入度为0的点是否每次出现2个以上(即t-h>=2)那么说明拓扑排序结果不止一种,名次不能确定#include#include#include#includeusing namesp原创 2015-04-24 22:35:26 · 531 阅读 · 0 评论 -
HDU 5285 wyh2000 and pupil(dfs或种类并查集)
wyh2000 and pupilTime Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 755 Accepted Submission(s): 251Problem DescriptionYoung theoret原创 2015-07-20 11:27:05 · 1533 阅读 · 0 评论 -
Codeforces Round #250 (Div. 1) B. The Child and Zoo(排序+并查集)(常规好题)
B. The Child and Zootime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputOf course our child likes walking in a原创 2015-08-05 23:55:04 · 942 阅读 · 0 评论