作用:1.将两个集合合并
2.询问两个元素是否在一个集合中
。
此时有路径压缩的优化。
当我们的叶节点查到根节点的时候,将路径上的所有点全部指向根节点,这样就减少了遍历的时间
使时间差不多达到o(1)
路径压缩代码+寻找父节节点,这里把父节点定义为p[x],表示为x的父节点
因为根节点没有父节点所以根节点的父节点是他自己。
所以当p[x]!=x的时候使每个节点的父节点等于根节点。
int find(int x){
if(p[x]!=x)p[x]=find(p[x]);
return p[x];
}
2.合并集合
就使将一个根节点的父节点换成另一个根节点
p[find(a)]=find(b)
3.判断两个节点是否在一个集合内
就是判断他们的父节点是否相同
find(a)==find(b)相同
else 不同