并查集的实现比较简单,注意一点在查找时执行路径压缩即可。
vector<int> Parent(100);
vector<int> Rank(100, 0);
void Init()
{
for (int i = 0; i < Parent.size(); ++i)
Parent[i] = i;
}
int Find(int x)
{
if (x != Parent[x])
Parent[x] = Find(Parent[x]);
return Parent[x];
}
void Union(int x, int y)
{
if ((x = Find(x)) == (y = Find(y)))
return;
if (Rank[x] > Rank[y])
{
Parent[y] = x;
}
else
{
Parent[x] = y;
if (Rank[x] == Rank[y])
Rank[y]++;
}
}