#define MAX 10000
int set[MAX];
int rank[MAX];
// Initialize
void init(){for (int i = 0; i < MAX; ++i) set[i] = i;}
// Find
int findSet(int v){
if (set[v] != v) set[v] = findSet(set[v]);
return set[v];
}
// Union by Rank
bool joinSet(int x, int y){
int fx = findSet(x), fy = findSet(y);
if (fx == fy) return true;
if (rank[fx] > rank[fy]) set[fy] = fx;
else{
set[fx] = fy;
if (rank[fx] == rank[fy]) ++rank[fy];
return false;
}
}
10-12
1929
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
07-27
07-27