并查集的实现~

 

//并查集的实现

int root[MAXN];//记录每个节点的根节点

void init(int x)//初始化
{
     for(int i=0;i<x;i++)root[i]=i;//每个节点开始时独立
}

int getroot(int x)//取出根节点,顺便压缩路径
{
    if(x!=root[x])root[x]=getroot(root[x]);
    return root[x];
}

inline int unionset(int x1,int x2)//合并俩集合
{
    int a=getroot(x1),b=getroot(x2);
    root[a]=b;
}