并查集

并查集

并查集基础知识

定义

并查集是一种用于管理元素所属集合的数据结构,实现为一个森林,其中每棵树表示一个集合,树中的节点表示对应集合中的元素.

思想

两个集合各出一个元素,以这个元素代表这个集合,以实现各种操作。

常用操作

1.查询两个元素是否在同一个集合中。

核心在查找代表元素

代码

` int find(int x){
if(fa[x]==x) return x;
else return fa[x]=find(fa[x]);
}

`

2.合并两个集合。

将其中size较大的集合的代表元素换成这n个集合共同的代表元素

代码

x=find(x),y=find(y); if(x==y) continue; if(siz[x]>siz[y]) swap(x,y); if(siz[x]==siz[y] ) siz[y]+1; fa[x]=y;

例题

https://www.luogu.com.cn/problem/P3367并查集模板

https://www.luogu.com.cn/problem/P1551亲戚

洛谷P2814 家谱 (字符串+并查集)

洛谷P3958 奶酪 (并查集或搜索)

洛谷P2661 信息传递 (并查集)

[洛谷P3144 USACO16OPEN]Closing the Farm S

[洛谷P6121 USACO16OPEN]Closing the Farm G (上一道题的数据加强版,思路挺巧的,好题qvq)

洛谷P1955 程序自动分析 (离散化+种类并查集,没有离散化数据无情giao崩程序QAQ,算普通并查集中的较难题)

种类并查集

定义

即在普通并查集“亲戚的亲戚也是亲戚”的基础上再进行一些“分类”,但是这个分类呢并不是根据物品的种类来进行分类,而是类似“敌人的敌人是朋友”的分类(并没有说明“朋友的敌人是我的敌人”!要根据具体题目分析

例题

洛谷P1892 团伙](https://www.luogu.com.cn/problem/P1892) (基础种类并查集 ,用普通并查集也能做)

洛谷P2024 食物链 (上文说到的三种循环关系的例题,值得做)

洛谷P1525 关押罪犯 (转换一下题目就是种类并查集,思路比较巧)

食物链

https://www.luogu.com.cn/problem/P2024

带权并查集

定义

  • 知识搬运

并查集实际上是由若干棵树构成的森林,我们可以在树中的每条边上记录一个权值,即维护一个数组d,用d[i]保存节点i到父节点fa[i]之间的边权

在每次路径压缩后,每个访问过的节点都会直接指向树根,如果我们同时更新这些节点的d值,就可以利用路径压缩过程来统计每个节点到树根之间的路径信息

题型一般就是给出点之间的合并,然后询问两个点之间的距离

例题

posted @ 2026-01-24 09:35  rjq123456789  阅读(1)  评论(0)    收藏  举报