1 #include <bits/stdc++.h>
2 using namespace std;
3 #define MAX_N 1000
4 int par[MAX_N];
5 int ranks[MAX_N];
6
7 //初始化n个元素
8 void init(int n)
9 {
10 for(int i=0;i<n;i++){
11 par[i]=i;
12 ranks[i]=0;
13 }
14 }
15
16 //查询树的根
17 int Find(int x)
18 {
19 if(par[x]==x) return x;
20 else return Find(par[x]);
21 }
22
23 //合并x和y所属的集合
24 void unite(int x,int y)
25 {
26 x=Find(x);
27 y=Find(y);
28 if(x==y) return;
29 if(ranks[x]<ranks[y]) par[x]=y;
30 else{
31 par[y]=x;
32 if(ranks[x]==ranks[y]) ranks[x]++;//当两棵树等高时,合并后的高度+1
33 }
34 }
35
36 //判断x和y是否属于同一个集合
37 bool same(int x,int y)
38 {
39 return Find(x)==Find(y);
40 }
41
42 int main()
43 {
44 init(100);
45 return 0;
46 }