int parent[MAX_N];
int Rank[MAX_N];
void init(int n)
{
for(int i = 0; i < n; ++i)
{
Rank[i] = 0; parent[i] = i;
}
}
///在查询的过程中实现了路径压缩
int Find(int x)
{
if(parent[x] == x)
return x;
else
return parent[x] = Find(parent[x]);
}
///在合并的过程中实现按照rank合并
void unite(int x, int y)
{
///查找x和y所在集合的代表元素(根结点)
x = Find(x); y = Find(y);
if(x == y)
return;
if(Rank[x] < Rank[y])
parent[x] = y;
else
{
parent[y] = x;
if(Rank[x] == Rank[y]) ++Rank[x];
}
}
bool same(int x, int y)
{
return Find[x] == Find(y);
}
【板子】并查集
最新推荐文章于 2022-10-06 01:29:43 发布