c++中并查集类的简单实现
class ufs {
public:
int ufsCount;
vector<int> fa;
ufs(int n) {
fa.resize(n+1);
ufsCount = n;
for(int i = 1; i <= n; i++) {
fa[i] = i; // 一开始连通分量指向自己
}
}
int find(int m) {
if(fa[m] != m) {
return fa[m] = find(fa[m]); // 图的根节点不是指向自己, 则进行路径压缩算法。
}
return m;
}
// 将两个节点进行合并操作。
void unionSet(int x, int y) {
int faX = fa[x];
int faY = fa[y];
if(faX != faY) {
fa[y] = faX;
ufsCount--;
}
}
};