int par[MAXN];
int deep[MAXN];
void init(int n)//初始化
{
for(int i=0;i<n;i++)
{
par[i] = i;
deep[i] = 0;
}
}
int find(int x)//找根
{
if(par[x] == x)
return x;
else
return par[x] = find(par[x]);
}
void unite(int x,int y)//合并
{
x = find(x);//注意这里是合并两个节点的根
y = find(y);
if(x==y)
return ;//表明在同一个集合中
if(deep[x]<deep[y])
par[x] = y;
else
{
par[y] = x;
if(deep[x]==deep[y])
deep[x]++;
}
}
并查集
最新推荐文章于 2023-05-12 16:29:23 发布