并查集
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]);
}