并查集

并查集是一种用于处理集合合并与查找问题的数据结构,常用于判断无向图连通分量或顶点间连通性。其核心操作包括Find(查找集合代表元素)和Union(合并集合)。Find通过路径压缩提高效率,Union则实现集合合并。此外,Count操作可计算集合点数。本文介绍了并查集的基本概念、模板代码及优化技巧。
摘要由CSDN通过智能技术生成

并查集,从名字来看主要就是合并与查找,通常会有三种操作。分别是Union,Find,Count。
比如,若某个元素 x 是否在集合 s1 中(Find操作),返回集合 s1 的代表元素即可。这样,判断两个元素是否在同一个集合中也是很方便的,只要看find(x) 和 find(y) 是否返回同一个代表即可。而对并查集而言,一个简单的应用就是判断无向图的连通分量个数,或者判断无向图中任何两个顶点是否连通。
操作简介:
1、Find:
Find操作需要找到该子集合的代表元素,而代表元素是树根,因此需要保存树中结点的父亲结点,对于每一个结点,如果知道了父亲,沿着父结点链就可以最终找到树根。这也就是Find函数的运行原理。(简单起见,我们将一维数组的值均初始化为-1)
模板代码如下:
int Find(int x){
if(bcj[x]<0)return x;
return Find(bcj[x];}
其中Find函数有时会因用例过多,从而导致时间运行过长,这个时候就可以进行路径压缩。
具体代码跟模板没有较大区别,例子如下:
int Find(int x){
if(bcj[x]<0)return x;
return bcj[x]=Find(bcj[x];}
2、Union:
Union操作就是将两个不相交的子集合合并成一个大集合。简单的Union操作是非常容易实现的,因为只需要把两个集合整体合并,即可实现。
模板代码基本如下:
void Union(int x,int y){
x=Find(x);y=Find(y);
if(x==y)return;
bcj[x]+=bcj[y];
bcj[y]=x;
}
因为Union中含有Find函数,所以一般就是Find函数要在Union前面写出。
3、Count:
Count主要就是一种计算集合中点数的操作方法,输出关于X所在的集合含有多少点(不要忘记X本身)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值