并查集详解附例题

并查集详解(C/C++) 并查集算法详解(C++)并查集基础并查集是什么?并查集的作用是什么?并查集的结构合并查询代码实现优化1:避免退化代码优化优化2:路径压缩代码优化复杂度分析经典例题并查集进阶:带权并查集带权并查集是什么?带权并查集的作用是什么?代码实现 并查集基础 并查集是什么? 并查集是用来管理元素分组的算法。 并查集的作用是什么? 并查集可以高效的对元素进行分组(合并在一起),并且能快速的查询两个元素是否属于同一组。 并查集的结构 合并 并查集是一种树状结构。比如元素1和2属于同一组、元素1和3也属于同一组,那么元素2和 阅读详情

引入

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

顾名思义,并查集支持两种操作:

  • 合并(Union):合并两个元素所属集合(合并对应的树)
  • 查询(Find):查询某个元素所属集合(查询对应的树的根节点),这可以用于判断两个元素是否属于同一集合

并查集在经过修改后可以支持单个元素的删除、移动;使用动态开点线段树还可以实现可持久化并查集。

Tips:并查集很难以较低的复杂度分离集合。

初始化

初始时,每个元素都位于一个单独的集合,表示为一棵只有根节点的树。方便起见,我们将根节点的父亲设为自己。

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

查询(Find)

普通查询

我们需要沿着树向上移动,直至找到根节点。

int Find(int x)
{
    return father[x] == x? x : Find(father[x]);
}

路径压缩

在查询过程中的每个结点,我们可以将他们直接连接到根结点,大大加快后续查询速度

int Find_(int x)
{
    if(father[x] != x) father[x] = find(father[x]);
    return father[x];
}

压缩后:

合并(Union)

将两个元素和平到一个集合中,体现在数据结构上,就是将两颗子树合并成一颗大树,只需要将其中一颗子树的根结点与另外一颗子树的根节点连接即可

void Union(int x,int y)
{
    father[find(x)] = find(y);
}

启发式合并

合并时,将哪颗子树的根节点作为新的根结点是一个问题,这一步操作会影响后续操作的复杂性,

一般的将结点更小或深度较小的子树连接到另外一颗树上。

(待补充)

并查集+例题 并查集的功能: 1:非常快的检查两个元素是否属于一个集合。 2:两个元素各自所在的集合,请你把它合并在一起。 并查集的基本组成部分(所用到的数据结构): 并查集有三个函数(也可以是两个) 一:find函数:寻找某个节点所在集合的头节点。 二:union函数:合并两个节点所在的集合。 三:issameset函数:判断两个节点是否属于一个集合。 所用到的数据结构: 数组:定义一个pr... 阅读详情

相关推荐

【LeetCode】一文吃透并查集(附例题)

其中的每个元素表示当前变量所在的连通分量的父节点信息,如果父节点是自身,说明该变量为所在连通分量的根节点。,秩没有明确的定义,一般可以指以节点为根节点的子树的深度,也可以表示以根节点的子树的节点个数,考虑按秩合并之后可以让查找的效率更高。表示每个每个节点最开始都是自己一个集合,也就是节点的父节点都是自己。查找时,沿着当前分量的父节点一路向上查找,直到找到根节点,这个过程也叫。合并时,将属于同一类的节点合并到一个树中,设计。将 x 的根节点指向 y 的根节点。并查集主要用于解决一些。,具体来说有两种方法。

像我这样的人 1623

并查集+路径压缩

并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题(即所谓的并、查)。比如说,我们可以用并查集来判断一个森林中有几棵树、某个节点是否属于某棵树等。 并查集两个操作“并”和“查”:并:将两个集合合并查:询问两个数是否在一个集合中 (1)初始化。定义数组int s[]是以结点i为元素的并查集,开始的时候,还没有处理点与点之间的朋友关系,所以每个点属于独立的集,并且以元素i的值表示它的集s[i],例如元素1的集s[1]=1。   下面是图解,左边给出了元素与集合的值,右边画出了逻辑关系。为了.

qq_52200998的博客 3520

用AI+Playwright实现零代码UI自动化测试:以登录页面为例的实战指南

本文详细介绍了如何利用AI与Playwright结合实现零代码UI自动化测试,特别以登录页面为例进行实战演示。通过自然语言描述生成测试脚本,大幅降低技术门槛,提升测试效率,并支持跨浏览器验证。适合非技术人员快速上手专业级自动化测试。

weixin_28842269的博客 403

【数据结构】并查集(路径压缩)

并查集

The porters of knowledge 2645

药物重定位实战:如何用反向找靶技术挖掘老药新用(附Python代码示例)

本文详细介绍了药物重定位中的反向找靶技术,通过分子相似性计算、机器学习模型和结构对接等方法,挖掘已有药物的新治疗潜力。附Python代码示例,帮助读者快速实现从分子结构到潜在靶标的智能预测,显著提升药物研发效率。

weixin_28726671的博客 259

kettle多表数据迁移

点击 文件——新建——作业,在左侧的 核心对象 标签下选择 通用,双击添加一个 start ,一个 转换 ,一个 作业 和一个 成功 到右侧的作业面板,这些作业项都可以改名字。点击文件—新建—转换,在左侧的 核心对象 标签下选择 输入 下的 表输入,双击添加到右侧的转换面板,再选择 作业 下的 复制记录到结果 ,双击添加到右侧的转换面板。新建转换,在左侧的 核心对象 标签下选择 作业 下的 从结果获取记录,双击添加到右侧的转换面板,再选择 作业 下的 设置变量 ,双击添加到右侧的转换面板。

u014061745的博客 1342

并查集最重要的优化:路径压缩

路径压缩其实就是把一条线上的所有点的祖先尽可能的往上,依次来减少搜索的次数。此时已知祖先了,接下来就是把这条线上所有的节点的父节点都变成此时的x。如果我们直接find(a),就起不到把过程中的所有父节点都统计的作用了。因为我们优化的是find函数,所以我们先写一个find2。这样的路径压缩就会把时间复杂度从O(n)直线编程O(1)今天我们要来说另一种对并查集的优化:路径压缩。这样的话,共搜索次数为3次了,大大减少了时间。如果用我们刚才说的路径压缩的思想呢?这样,寻找c的搜索次数便可将至1次。

lsy201009的博客 2094

Datawhale~数据挖掘实践之序列问题处理~天池·资金流入流出预测-挑战Baseline~Day01~数据探索与分析

写在前面✍ 本系列笔记基于天池平台上“资金流入流出预测-挑战Baseline”学习赛,记录如何完整的打一次数据挖掘类比赛。同时,该比赛属于序列建模问题,希望学习完成这个任务,可以对序列问题的处理有一定的独立思考能力和实践操作能力,可以将所学理论,用编码的形式和实际的问题得到深入。 第一篇,EDA Content: 初步了解赛题及数据 1.1 任务 1.2 用户基本信息数据 1.3 用户申购赎回数据 1.4 收益率表 1.5 银行间拆借利率表 1.6 提交格式 1.7 评分指标 EDA 1 初.

小卜妞的博客 2358

并查集路径压缩(C++)

一、并查集:查找元素互相关联的集合 Keep Learning 34days; 合并:合并两个集合 查找:判断两个元素是否在一个集合 1、利用数组 father[] int father[N]; //表示元素i的最高父亲节点(根节点) 如果father[i] = i,说明i是其集合的 根节点(最高点) 2、开始每一个元素都是自己单独一个集合,令father[i] = i; for(int i = 0;i <= n;i++) father[i] = i; 3、查找:由于每个集合只能有一个根

Kyrie_irving_kun的博客 2553

Unity卡牌游戏UI框架:数据驱动与模块化设计实践

在Unity游戏开发中,UI系统是连接玩家与游戏逻辑的关键桥梁,其核心在于实现数据与表现的高效同步。数据驱动设计通过分离数据模型、逻辑状态与视图表现,利用观察者模式自动响应状态变化,确保了代码的清晰与可维护性。这种架构显著提升了开发效率,尤其在需要复杂状态管理和实时反馈的交互场景中,如卡牌游戏的拖拽、布局与动画系统。基于模块化思想,开发者可以将卡牌视图、布局管理、区域控制等组件像积木一样组合,快速构建出动态的手牌弧形布局、战场区域管理等特色功能。通过集成对象池、图集优化等性能方案,还能有效管理绘制调用与网格

weixin_34262482的博客 453

ERA5数据驱动WRFV4.4实战:单层嵌套配置与关键报错排查指南

本文详细介绍了使用ERA5再分析数据驱动WRFV4.4模式进行单层嵌套模拟的完整实战流程。内容涵盖从数据精准下载、WPS前处理配置、WRF核心参数设置到高频报错的深度排查与解决方案,旨在帮助初学者在有限服务器资源下,高效完成WRF模拟并规避常见陷阱。

q5r6s7的博客 770

数据结构 - 并查集路径压缩

并查集是一种用于管理一组不相交集合的数据结构,常用于解决连通性问题。在并查集中,路径压缩是一种重要的优化技术,它能够显著提高查找操作的效率。本文将深入探讨并查集路径压缩的基本原理,并通过具体的Java代码详细说明如何实现高效的路径压缩。

菜鸟小码的博客 1739

雷达工程师避坑指南:STAP处理中,间歇采样转发干扰为什么这么难对付?

本文深入解析了STAP处理中间歇采样转发干扰(ISRJ)的挑战与应对策略。通过分析ISRJ的工作机制和自由度消耗问题,结合仿真数据对比,揭示了其与传统压制干扰的本质差异。文章还探讨了在工程实践中如何构建有效的防御体系,包括降维处理技术选择和混合架构设计,为雷达工程师提供了实用的避坑指南。

weixin_30530339的博客 271

并查集详解(附例题和模板)

并查集详解(附例题和模板)

m0_73557680的博客 342

21天学会PCIe专栏(4.3)--PCIe配置方法

通过本节的学习,你应该对PCIe配置方法有了更深入的了解。软件配置方法包括直接访问和间接访问,可以通过特定的I/O指令或系统调用进行配置。硬件配置方法包括通过BIOS/UEFI设置和跳线设置,可以根据需要修改PCIe设备的配置参数。

xiaoheshang_123的博客 722

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

并查集简介及典型例题

文章目录1 并查集原理介绍2 典型例题 1 并查集原理介绍 网上有篇博文写的不错,为了方便直接摘抄记录下来。 参考链接:https://blog.youkuaiyun.com/qq_41593380/article/details/81146850 并查集听着比较高端,其实道理很简单。参考某高手的blog。通过读完这个故事,加上几个练习,你也能轻松了解这个名词,吹吹逼了,哈哈~ 故事如下: 江湖上散落着各式各样的大侠,有上千个之多。他们没有什么正当职业,整天背着剑在外面走来走去,碰到和自己不是一路人的,就免不了要打一架

Fan 1887

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

并查集详解及例题

一、并查集是什么并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。也就是说并查集用于将分散的树结构进行合并或者查询。二、并查集代码并查集主要分为三个过程1、初始化:将每个散点的父节点设为自己本身。void Init() { for(int i=1;i&lt;=n;i++) { pre[i]=i; } }2、Fi...

Hacker_Wind的博客 1927

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

带权并查集初探及例题解析

带权并查集是在普通并查集的基础上进行了扩展。普通并查集主要用于处理不相交集合的合并与查询问题,它可以高效地判断两个元素是否属于同一个集合,以及合并两个不同的集合。带权并查集在每个元素上额外维护了一个权值,这个权值可以表示元素之间的某种关系,比如距离、差值等。通过这些权值,我们可以在合并和查询操作的过程中获取更多关于元素之间关系的信息。带权并查集非常灵活,同时也学习成本也较高,作者在初看时也云里雾里,不过通过画图理清各个元素和树之间的逻辑关系,再到理解逻辑到内存上的映射关系,就能略懂一二了。

2404_88241585的博客 987

并查集(图论,附例题、代码)

并查集主要用于处理一些不相交的集合。有时候我们会得到一些元素,这些元素可能处于不同的集合,在相同的集合中有着较为复杂的联系。我们需要不断地查找某元素属于哪个集合。这类集合可以抽象地表示为查并集。引例:某比赛面向全国各大高校展开,每个学校需要派出3支队伍前往参赛。每支队伍中有一个队长、四名成员。队长负责与队员、学校比赛总指导老师做好对接,学校比赛总指导老师负责与队长、主办方做好对接。我们通过各个成员与队长、队长与指导老师的关系,便可以查到这些参赛者来自于哪个学校。

xiaoyuuoo的博客 1348

并查集详解

并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。并查集的思想是用一个数组表示了整片森林(parent),树的根节点唯一标识了一个集合,我们只要找到了某个元素的的树根,就能确定它在哪个集合里。

晴空๓ 3433

详解 并查集(图+代码+例题)

并查集的概念和代码实现

每篇博客都不是最终版,都会随着我的学习更新 1436

带权并查集 详解

简介 带权并查集与普通并查集的区别在于,其每条边/每个点都有权值。因此,我们需要额外用一个数组来维护每个点 xxx 到其当前祖先 faxfa_xfax​ 的权值和,并在路径压缩的时候维护。 直接说可能较难理解,于是下面是一道例题。 P1169 Description 传送门 Solution 考虑对于每个点 xxx,维护其到其祖先 faxfa_xfax​ 的距离 depxdep_xdepx​,并对于每个并查集的根维护连通块大小 sizsizsiz。 对于一个 M 操作,令涉及到的战舰分别为 x,yx,yx,

Cherrt的博客 2705

并查集的查询与合并详解

find()函数,并查集算法中,最为核心的就是find()函数。在这个算法中,路径压缩给我们的算法效率提高了很多, 并查集是一种树形的数据结构。使用树型结构来存储数据。树根的编号即为整个树的标号,且每个节点存储的数据是他的父节点下标。 并查集被很多OIer认为是最简洁而优雅的数据结构之一,主要用于解决一些元素分组的问题。它管理一系列不相交的集合,并支持两种操作:合并(Un这个也是需要理解的。合并、查询是并查集的两个主要操作,我们也应该熟悉理解。我们对并查集的讲解就到这里,希望以上内容对你有所帮助。

weixin_67596609的博客 1735

并查集+经典例题

查并集原来以前看过,当时看的那篇文章编了一个江湖的关系,令我印象深刻,可惜我找不到了。 查并集相当于并集,把没有关系的集合分开 可以想象为朋友圈,我朋友的朋友,跟我是一个朋友圈的。 基础 模板题 #include<bits/stdc++.h> using namespace std; const int maxn=2e5+10; int n,m; int z,x,y; int f[ma...

qq_43721152的博客 3413

【包含例题P1955、P1892、P2024、P1196】并查集、扩展域并查集、带权并查集

基础并查集就像管理多个独立的家族,每个家族有一个族长(根节点)。主要解决两大问题:找族长(Find):查询某个成员属于哪个家族,每一个家族都有一个族长做代表。联姻(Union):把两个家族合并成一个大家族。

2301_80361697的博客 764

并查集例题及解析

本章一共有四道例题。1.入门——冗余关系2.进阶——关押罪犯3.提高——家谱4.创新——搭配购买。

2301_76390048的博客 876
上一篇: PTA 03-树2 List Leaves
下一篇: AtCoder Beginner Contest 372(部分
不难不难不难
博客等级 码龄3年 83粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值