主要有三个函数:

void UFset()//初始化
{
for(int i=0;i<N;i++)
{
   parent[i]=-1;
}
}


int find(int x)//返回X节点所属集合的根节点
{
for(int i=x;parent[i]>=0;i=parent[i]);
while(i!=x)//优化方案--压缩路径
{
   int tmp=parent[x];
   parent[x]=i;
   x=tmp;
}
return i;
}


void Union(int R1,int R2)//将两个不同集合的元/////////素进行合并,使两个集合中任两个元素都连通

{
int tmp=parent[R1]+parent[R2];
if(parent[R1]>parent[R2])//优化方案――加权法则

{
   parent[R1]=R2;
   parent[R2]=tmp;
}
else
{
   parent[R2]=R1;
   parent[R1]=tmp;
}
}