void Make_set(int a)
{
p[a]=a;
rank[a]=0;
}
带路径压缩的Find—set:
int Find_set(int a)
{
if(p[a]!=a)
p[a]=Find_set(p[a]);
return p[a];
}
按秩合并的策略:
void Union(int a,int b)
{
a=Find_set(a);
b=Find_set(b);
if(rank[a]>rank[b])
p[b]=a;
else if(rank[a]<rank[b])
p[a]=b;
else
{
p[b]=a;
rank[a]++;
}
}