#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;
}
}
并查集
最新推荐文章于 2023-05-12 16:29:23 发布