并查集基础
属性
并查集的逻辑结构是一个包含N个元素的集合,如图:
并查集的存储结构是一个包含N个元素的树,如图:
用一个数组存储p[x]来存储每个元素(点)的父节点
讲解知识点
基本原理
每个集合的根节点便是这个集合的编号,每个点存储自己的父节点(初始化)
1 | for(int i=1;i<=n;i++) |
树根:p[x]==x //(父节点等于自己)
求集合编号:while(p[x]!=x) x=p[x] //(不是根节点的话,置换成父节点进行再次判断)
路径压缩优化
1 | int find(int x)//找根节点 |
并查集的两种基本操作
1.将两个集合合并
p[find(a)] = find(b)
2.询问两个集合是否在同一集合
if (find(a) == find(b))
例题
https://www.luogu.com.cn/problem/P3367
题解
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 shuaishuaiqi's blogs!