并查集模板

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并查集模板相关的知识,希望对你有一定的参考价值。

并查集是一种用来管理元素分组情况的数据结构、

并查集的复杂度:并查集加入两个优化(路径压缩和高度的合并)以后效率很高,对n个元素的并查集进行一次操作的复杂度是O(a(n)).在这里,a(n)是阿克曼(Ackermann)函数的反函数,这比O(log(n))还快,不过这是“均摊复杂度”,也就是说不是每一次操作都满足这个复杂度,而是多次操作以后平均每一次的操作的复杂度是O(a(n))

 

 1 int par[MAX_N];        //父亲
 2 int rank[MAX_N];    //树的高度
 3 
 4 //初始化n个元素
 5 void init(int n)
 6 {
 7     for(int i=0;i<=n;++i){
 8         par[i]=i;
 9         rank[i]=0;
10     }
11 }
12 //查询树的根非递归实现 
13 int find(int x)
14 {
15     while(par[x]!=x)
16         x=par[x];
17     return x;
18  }
19  //合并x和y所属集合
20  void unite(int x,int y)
21 {
22      int fx=find(x);
23     int fy=find(y);
24     if(fx==fy)    return;
25     if(rank[fx]>rank[fy])
26         par[fx]=fy;
27     else{
28         par[fy]=fx;
29         if(rank[fx]==rank[fy])    
30             rank[x]++;
31     }
32 }
33 //关于路径压缩 
34 int find2(int x)
35 {
36     int fx=find(x);
37     int t;
38     while(x!=fx){
39         t=par[x];
40         par[x]=fx;
41         x=t;
42     }
43     return fx;
44 }

 

以上是关于并查集模板的主要内容,如果未能解决你的问题,请参考以下文章

Tarjan 模板,高级并查集

并查集题目模板及java代码

并查集模板(洛谷——模板并查集)

并查集模板

带权并查集(含种类并查集)经典模板 例题:①POJ 1182 食物链(经典)②HDU - 1829 A bug's life(简单) ③hihoCoder 1515 : 分数调查(示例代码(代

ybtoj并查集例题1模板并查集