正在查看旧版本。 查看 当前版本.

与当前比较 查看页面历史记录

版本 1 下一个 »

Disjoint-Set,也称Union-FindDisjoint-Set-Union,是一种用于表示不相交集合的数据结构。并查集可用于解决像朋友圈这样的问题,即在一个相互可能为朋友的朋友圈里计算朋友圈的数目,以及判断两个人是否属于同一个朋友圈。

简单的并查集体结构的设计如下:

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)];
    }
};
  • 无标签