并查集【模板】

并查集是一种数据结构,用于高效地合并和查询元素是否属于同一集合。基本操作包括合并两个元素所在的集合以及判断两个元素是否在同一集合。在初始化、合并和查询操作中,路径压缩是一个关键优化技巧,它在查找元素根节点时将路径上所有节点直接指向根节点。本文将通过实例和代码详细阐述并查集的实现和应用。
摘要由CSDN通过智能技术生成

作用:

1:将两元素合并,

2:访问两元素是否在同一个集合中。

举个例子:

给定2个数1 2;

集合编号分别为1 2;

先查询1与2是否在同一集合,此时1与2不在一个集合;

接下来将1与2所在集合1与集合2合并,集合2-->集合1;

集合编号为1 1;

此时查询1与2是否在同一集合,那1与2都在集合1中。

那么如何实现捏,首先要解决三个问题

问题:1,如何判断根节点:--->if(p[x]==x)

问题:2,如何求x的集合编号:--->while(p[x]==x) x=p[x]

问题:3,如何合并两个集合:将两个集合的根节点合二为一,操作如下:x是集合X的编号;y是集合Y的编号。--->p[x]=y。

基于上述三个问题

给出核心代码

1,初始化,返回x所在集合编号+路径压缩(代码如下)

这里需要简单说明一下路径压缩:

查找某个元素的根的时候,让从此元素到根的路径上的每一个节点都设置根为父节点

for (int i=1;i<=n;i++) p[i]=i;//初始化节点

int find(int x)//返回x所在集合编号+路径压缩
{
    if (p[x]!=x) p[x]=find(
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阡陌魂牵梦萦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值