路径压缩后的find函数
int find(int x)
{
return pre[x]==x? x:pre[x]=find(pre[x]);
}
总结:通过将每次经过的点更新root节点来做到路径压缩
使用rank加权后的合并函数
void join(int x,int y)
{
if(find(x)==find(y)) return;
if(rank[x]>rank[y]) pre[find(x)]=find(y);
else {
if(rank[x]==rank[y])
rank[y]++;
pre[find(y)]=find(x);
}
}
总结 利用rank记录树的深度,每次将深度较低的节点合并到深度较高的节点,