并查集C++实现

284 阅读1分钟

并查集

class DisjointSets //Union-find Algorithm 并查集
{
public:
    DisjointSets(int n)
    {
        N = n;
        for (int i = 0; i <= N; i++)
        {
            parent.push_back(i);
        }
    }
    void to_union(int a, int b);
    int find_parent(int a);
private:
    int N;
    vector<int> parent;
};

void DisjointSets::to_union(int a, int b)
{
    // parent[find_parent(a)] = parent[find_parent(b)];
    parent[find_parent(a)] = find_parent(b);
}

int DisjointSets::find_parent(int a)
{
    return parent[a] == a ? a : find_parent(parent[a]);
}