#define _for(i,a,b) for(int i = (a);i < (b);i ++) const int maxn = 50003; int par[maxn]; //父亲 int high[maxn]; //树的高度 void init(int n) { _for(i,0,n) { par[i] = i; high[i] = 0; } } int find(int x) { return par[x] == x ? x : par[x] = find(par[x]); } void unite(int x,int y) { x = find(x);y = find(y); if(x==y) return ; if(high[x]<high[y]) par[x] = y; else { par[y] = x; if(high[x]==high[y]) high[x] ++; } } bool same(int x,int y) { return find(x) == find(y); }
相关文章: