并查集的操作
- Find: 找到a的root
int Find(vector<int>& root, int index) {
if (root[index] != index) {
root[index] = Find(root, root[index]);
}
return root[index];
}
- 合并a和b:找到a的root1,再找到b的root2,root1指向root2
void Union(vector<int>& root, int index1, int index2) {
root[Find(root, index1)] = Find(root, index2);
}
解题思路
- 初始化:自己指向自己
- 找到判断合并的条件,然后合并。题目的答案,一般是找到root的个数。
参考
https://mp.weixin.qq.com/s/mCmvo-8u9ZGTRzjRLs3ePA
https://mp.weixin.qq.com/s/rF5bohHf3XfstGkjBawBuw