一道比最基础的并查集有优化的题;
l 并查集的优化
1、Find_Set(x)时 路径压缩
寻找祖先时我们一般采用递归查找,但是当元素很多亦或是整棵树变为一条链时,每次Find_Set(x)都是O(n)的复杂度,有没有办法减小这个复杂度呢?
答案是肯定的,这就是路径压缩,即当我们经过"递推"找到祖先节点后,"回溯"的时候顺便将它的子孙节点都直接指向祖先,这样以后...
分类:
其他好文 时间:
2014-07-14 18:30:13
阅读次数:
233
UVa的题目好多,本题是数据结构的运用,就是Union Find并查集的运用。主要使用路径压缩。甚至不需要合并树了,因为没有重复的连线和修改单亲节点的操作。
郁闷的就是不太熟悉这个Oj系统,居然使用库中的abs就会WA,自己写了个abs小函数就过了。
题目:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&...
分类:
Web程序 时间:
2014-07-05 23:39:10
阅读次数:
339
这是一道考察并查集的路径压缩的题。题意:在悟空的世界,有N个龙珠和N个城市(编号从1到N),神龙最开始把每颗龙珠都放在对应编号的城市。悟空要去收集龙珠,但是这些龙珠有时候是会被转移的。你需要告诉悟空一些有关龙珠的信息才行。现在又T组测试,每组测试都有一个N(龙珠和城市的数量)和Q(操作行为的数量),...
分类:
其他好文 时间:
2014-07-01 23:56:29
阅读次数:
282
题目:
链接:点击打开链接
题意:
思路:
冲突的条件是:两个人坐在同一行,同时他们到根节点的差值等于他们之间的差值,这时就产生冲突了。于是我们可以用一个dist数组来保存节点到根的距离,而这个距离在路径压缩的时候更新一下就可以了,dist[x]+=dist[parent[x]]。然后就是合并后的距离,令r1=Find(u),r2=Fin...
分类:
其他好文 时间:
2014-07-01 08:13:34
阅读次数:
201
链接推荐一篇帖子http://blog.csdn.net/lyhypacm/article/details/6734748这题暴力不可行主要是因为这颗树可能极度不平衡,不能用并查集是不能路径压缩,这样时间复杂度是很高的。可以用伸展树主要是因为它的伸展性,每次操作后可以通过伸展使这棵树更好的保持平衡。...
分类:
其他好文 时间:
2014-06-22 10:40:14
阅读次数:
324
并查集的路径压缩。 1 #include 2 #include 3 4 #define MAXNUM
100005 5 6 int deg[MAXNUM], bin[MAXNUM]; 7 char isCycle[MAXNUM]; 8 9 int
find(int x) {10 i...
分类:
其他好文 时间:
2014-04-29 17:22:46
阅读次数:
308