2025-01-20 19:06阅读: 6评论: 0推荐: 0

并查集(学习笔记)

用处:

并查集是一种用来处理不同集合之间的关系的算法。正如它名字一样它本身就是一个可以合并,查询的树形集合。它可以用来做分组类型的题。具体功能,拓展和原理

实现:

基本功能的实现:

\(1.\)初始化,我们令每一个参加计算的点的父亲设为他自己:即初始时就有\(n\)个集合,每个点就算一个;

void init(){
	for(int i=1;i<=n;i++){
		fa[i]=i;
	}
}

\(2.\)查询\(find()\)用来查找每一颗集合树的根。这样可以用来判断是否在同一集合,和进行合并操作;我们只需要用递归依次向上找父节点,直到找到一个点的父节点就是它自己即可。为了优化效率,及防止它形成一个链,使每次的查询都很慢。我们可以在递归时让每一个节点指向根节点;

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

\(3.\)合并\(merge\)。用来合并两个集合,只需要将一颗树根节点的父节点指向另一颗树的根节点即可。注意要先判断两个集合是否在同一集合

void merge(int x,int y){
	if(find(x)==find(y))return;
	fa[find(x)]=find(y);
}

练习:

\(1\).P1111 修复公路 题解
\(2\).P1525 [NOIP2010 提高组] 关押罪犯 题解
\(3.Cheap Robot\) 题解

本文作者:XichenOC

本文链接:https://www.cnblogs.com/XichenOC/p/18682345

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   XichenOC  阅读(6)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起