并查集的精华所在就在于那两个的函数,一个合并函数一个查找函数,其实这种问题你不用想的太过深入,有时想的太深入反而会把自己搞迷。
首先是查找函数
int find(int x)
{
if(x!=pre[x])
{
x=pre[x]=find(pre[x]);
}
return x;
}
查找函数就是找自己的祖先直倒找到pre[x]=x为止。
void bing(int x,int y)
{
if(find(x)!=find(y))
{
pre[find(x)]=find(y);
}
}
合并就是把两者的祖先向连确保两者能连到同一个祖先上面。