1 //并查集的实现// 2 int par[MAX_N]//父亲 3 int rank[MAX_N]//树的高度 4 5 void init(int n)//初始化n个元素 6 { 7 for(int i=0; i<n; i++) 8 { 9 par[i]=i; 10 rank[i]=0; 11 } 12 } 13 14 int find(int x)//查询树的根 15 { 16 if(par[x]==x) 17 return x; 18 else 19 return par[x] = find(par[x]); 20 } 21 22 void unite(int x, int y)//合并x和y所属的集合 23 { 24 x = find(x); 25 y = find(y); 26 if(x == y) return; 27 28 if(rank[x]<rank[y]) 29 par[x]=y; 30 else 31 { 32 par[y]=x; 33 if(rank[x]==rank[y]) rank[x]++; 34 } 35 } 36 37 bool same(int x, int y)//判断x和y是否属于同一个集合 38 { 39 return find(x)==find(y); 40 }
觉得有帮助,请随手点个赞之类的吧。。。