今天讲一下并查集
并查集由一个整数型的数组和两个函数构成。数组pre[]记录了每个点的前导点是什么,函数find是查找,join是合并。
int find(int x)
{
int r=x;
while(r!=pre[r])//若r的前导点不是它本身
{
r=pre[r];//查找
}
//路径压缩
int i=x,j;
while(i!=r){
j=pre[i];
pre[i]=r;
i=j;
}
return r;//返回查找到的根节点
}
//合并
void join(int x,int y)
{
int rx=find(x),ry=find(y);
if(rx!=ry)
{
pre[rx]=ry;
}
}
另外,这篇文章讲的非常好,也很生动,推荐一下
http://blog.youkuaiyun.com/dellaserss/article/details/7724401/