并查集
李今朝
这个作者很懒,什么都没留下…
展开
-
并查集路径优化
并查集路径优化 我们想要查找4的掌门时,发现他很深,我们可以在查找过程中降低他的深度。 第一种方法 将每一个节点的父节点,置换为爷爷节点,这样可以减少数的高度。 f[x]=f[f[x]] 结果如下图所示 代码: int query(int x){ if(x!=f[x]){ f[x]=f[f[x]]; query(f[x]) } return x; } 虽然数的高度降低了,但是,并没有达到最优。 这样的一棵树才是最优的 实现: int query(int x){ if(x!=f[x]){原创 2020-11-28 17:03:32 · 186 阅读 · 0 评论 -
并查集+路径压缩(POJ 2524)
并查集+路径压缩(POJ 2524) 题目链接: http://poj.org/problem?id=2524. 并查集 x与y是同一门派的,y与z是同一门派的,那么x与z也是同一门派的。 给出N个人(1~n),m对关系(并不是所以人都)。并查集可以构建出n个点中有几个连通图,判断任意两个点是否在们一个连通图中。 fa[i]=s; i=s 表示i是一个根节点(可以理解为一个门派的掌门) i!=s 表示i的上一级是s,s不一定是掌门。 初始化:将自己的上层节点(即父节点)设置为自己) 查找x的掌门: 判断x的原创 2020-11-28 16:47:41 · 172 阅读 · 0 评论