初始化
初始化 fa[i] = i
每个人的父节点是自己
for (int i=1; i<=n; i++) {
fa[i] = i;
}
查找
int find(int i) {
if (fa[i] == i) return i;
else {
fa[i] = find(fa[i]);
return fa[i];
}
}
合并
uunion(int a, int b) 将一者的父节点的父节点改为另一者的父节点
void uunion(int a, int b) {
fa[find(a)] = find(b);
}
统计
把所有 find(fa[i]) 加入set中去重
set<int> s;
for (int i=1; i<=n; i++) {
s.insert(find(fa[i]));
}
cout << s.size() << '\n';