并查集的定义
- 并查集是一种维护集合的数据结构。并查集的每一个集合都是树。
- 它支持两个操作:
- 合并:合并两个集合
- 查找:判断两个元素是否属于一个集合
int father[i];
- 对同一个集合来说,只存在一个根结点,且将其作为所属集合的标识。
并查集的基本操作
int father[maxn];
int rank[maxn];
void init()
{
for (int i = 1; i <= N; i++)
{
father[i] = i;
rank[i] = 0;
}
}
int find(int x)
{
if (father[x] = x)
{
return x;
}
else
{
return find(father[x]);
}
}
void unite(int x, int y)
{
int faX = find(x);
int faY = find(y);
if (faX == faY)
{
return;
}
if (rank[faX] < rank[faY])
{
father[faX] = faY;
}
else
{
father[faY] = faX;
if (rank[faX] == rank[faY])
{
rank[faX]++;
}
}
}
bool same(int x, int y)
{
return find(x) == find(y);
}