并查集入门
Posted chendie
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并查集入门相关的知识,希望对你有一定的参考价值。
并查集是将元素按需要进行集合合并及查找的方法,使用数组pre[x]表示x的上级元素。
1.查找。
可用pre[x]==x来表示x为该集合的根,用根来做这个集合的代表,查找时使用递归找到根判断该元素所在集合。
int find(int x) { if(x!=pre[x])
return find(pre[x]);
else
return x;
}
2.合并。
只需将一个集合的根设为另一个集合的上级就可以完成两个集合的合并。
void together(int x,int y) { int m=find(x); int n=find(y); if(m!=n) pre[m]=n; }
但有很大的可能使得集合程线性排列,这样就会使每次查找的速度变慢,所以就要路径压缩。路径压缩要每次搜索时将集合结点全部直接连接到根上,这样处理之后搜索复杂度只有O(1)。
int findnew(int x) {
if(pre[x]!=x)
return pre[x]=findnew(x);
else
return x; }
以上便是并查集最基本的两个操作。
以上是关于并查集入门的主要内容,如果未能解决你的问题,请参考以下文章