并查集

作用: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 不同

上一篇:P3178 [HAOI2015]树上操作


下一篇:删除原字符串的子串(c++内置find函数好啊)