并查集
板子:
void make(int x)//建立
{
me[x]=x;
}
int find(int x)//寻找根节点
{
if(me[x]==x)return x;//自己就是根节点
else find(me[x]);//不是,找爸爸的爸爸
}
int join(int x,int y)//合并
{
int x1=find(x);
int y1=find(y);
if(x1!=y1)//根节点不是一个
{
parent[x1]=y1;
}
}
详解 http://blog.csdn.net/chudongfang2015/article/details/51286668