...
代码块 |
---|
class DSU { vector<int> parent; public: DSU(int n) : parent(n) { for(int i = 0; i < n; i++) { parent[i] = i; } } int find(int x) { if(parent[x] == x) { return x; } else { return find(parent[x]); } } void merge(int x, int y) { // 将y的parent设置为x的parent parent[find(y)] = parent[find(x)]; } }; |
以下演示了上面的并查集的工作流程:下面的过程演示了并查集的工作流程:
draw.io Diagram | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
注意,在merge(2, 3)时,需要递归找到2的根结点1,再把3合并到1上。