并查集

//并查集
class DSU {
public:
    DSU(int n): parent(n) { //构造函数
        for (int i = 0 ; i < n; ++i)
            parent[i] = i;              
    }

    void Union(int i, int j) { //将i所在的集合与j所在的集合合并
        parent[Find(i)] = Find(j);      
    }

    int Find(int i) { //找到i所在的集合
        if (parent[i] != i) parent[i] = Find(parent[i]);
        return parent[i];
    }
private:
    vector parent;
};

 

你可能感兴趣的:(C++)