并查集是一种用来管理元素分组的数据结构。它包含两个主要操作:查找和合并。查找操作用于确定元素所属的分组,而合并操作用于将两个分组合并成一个。
- 将两个集合合并
- 询问两个元素是否在一个集合中
合并
//并查集:
const int N = 1e3;
int fa[N], sz[N];
int findset(int x)
{
if (x == fa[x])
return x;
else
return findset(fa[x]);
}
void Union(int x, int y)
{
int fx = findset(x), fy =findset(y);
if (fx == fy)
return;
else
fa[fx] = fy;//我们这里默认将fx合并到fy
}
路径压缩
//路径压缩;
int findset(int x)
{
if (fa[x] == x)
return x;
fa[x] = findset(fa[x]);
return fa[x];
}