版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

代码块
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
borderfalse
diagramName并查集合
simpleViewertrue
width
linksauto
tbstyletop
diagramDisplayName
lboxfalse
diagramWidth767
revision2

注意,在merge(2, 3)时,需要递归找到2的根结点1,再把3合并到1上。