
void init(int x)
{
for(int i=0;i<=x;i++)
{
par[i]=i;
ran[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)
{
int xx = find(x);
int yy = find(y);
if(xx==yy)//先找出父节点 如果相同就返回;
return ;
if(ran[x]>ran[y])//如果不相同就把矮的树加到高的树上,如果相同就直接把一颗加到另一颗上;
par[y]=x;
else if(ran[y]>ran[x])
par[x]=y;
else
{
par[y]=x;
ran[x]++;
}
}原文地址:http://blog.csdn.net/u010123208/article/details/27568983