并查集(union-find set)
并查集:
并查集(union-find set)是一种维护各个不相交集合之间的关系的数据
结构,可以用于维护图的连通分量或是变量之间的关系。
通常用森林表示法实现并查集,即为每个元素,维护一个F[i]表示它的父节点,初始时每个结点自成一棵树,每棵树中的元素表示当前集合中的元素。
操作:
(1)union(x,y):即将x所在树的根节点与y所在树的根节点合并,合并两个集合。
(2)find(x):查找x所在树的根节点。
优化:
(1)路径压缩:由于原始重复查找会浪费大量不必要时间,我们在查找
结点x时,将它的所有祖先结点的父节点全部指向根节点,这样对这些结
点就做到了O(1)查找。
(2)启发式合并:合并两棵树时,为了让新树深度减小,应该把矮的树
的根节点指向高的根节点。
基于rank的合并方法:
对于每个结点,维护一个rank,初始为0。当两棵rank相等的树合并时,随意合并,将根节点不变的那棵rank+1,否则将rank小的接到rank大的上去
带权并查集:
通常维护结点的父节点是不够的,有时候题目会给出一些额外条件让我们维护。
我们可以给每个结点额外维护一个权值(到根节点的距离,与根节点的关系云云之类)
在查找时父节点顺带维护(通常是在已经查找完父节点后再维护)

浙公网安备 33010602011771号