并查集详解及例题

算法提升:并查集的十个经典题目 算法成神之路:并查集的十个经典题目 阅读详情

一、并查集是什么

并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。也就是说并查集用于将分散的树结构进行合并或者查询。

二、并查集代码

并查集主要分为三个过程

1、初始化:将每个散点的父节点设为自己本身。

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

2、Find:找到每个散点的父节点。

int Find(int a)
{
    int r=a;//定义变量r去寻找父节点
    while(pre[r]!=r)//如果pre[r]不是r的父节点
        r=pre[r];   //那么r继续寻找其父节点
    int i=a,j;     //路径压缩代码,可省略不写,相当于优化
    while(i!=r)   
    {
        j=pre[i];
        pre[i]=r;
        i=j;
    }
    return r;    //返回找到的父节点
}

3、Join:将散点\不同的树进行合并。


void join(int a,int b)
{
    int fx=Find(a),fy=Find(b);  //fx为a的父节点,fy为b的父节点
    if(fx!=fy)//如果a和b不是同一个父亲
    {
        pre[fy]=fx;//就让他们合并为一棵树,方法是让a是b的父节点或b是a的父节点
    }
} 

四、例题——HDU1232畅通工程

Problem Description
某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?
 

Input
测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M;随后的M行对应M条道路,每行给出一对正整数,分别是该条道路直接连通的两个城镇的编号。为简单起见,城镇从1到N编号。
注意:两个城市之间可以有多条道路相通,也就是说
3 3
1 2
1 2
2 1
这种输入也是合法的
当N为0时,输入结束,该用例不被处理。
 

Output
对每个测试用例,在1行里输出最少还需要建设的道路数目。
 

Sample Input
4 2 1 3 4 3 3 3 1 2 1 3 2 3 5 2 1 2 3 5 999 0 0
 

Sample Output
1 0 2 998
AC代码:
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
//#define PI 3.14159265358979323
#define inf 0x3f3f3f3f
int pre[1005];//父节点数组
int n,m;//n为节点总个数,m为输入道路的数目
int ans;
int Find(int a)
{
    int r=a;
    while(pre[r]!=r)
        r=pre[r];
    int i=a,j;
    while(i!=r)
    {
        j=pre[i];
        pre[i]=r;
        i=j;
    }
    return r;
}
void join(int a,int b)
{
    int fx=Find(a),fy=Find(b);
    if(fx!=fy)
    {
        pre[fy]=fx;
        ans--;
    }

}
void Init()
{
    for(int i=1;i<=n;i++)
    {
        pre[i]=i;
    }
}
int main()
{
    while(scanf("%d",&n)&&n)
    {
        scanf("%d",&m);
        ans=n-1;//如果各个散点之间均没有道路,则需要开通n-1条道路
    int a,b;
    Init();
    for(int i=1;i<=m;i++)
    {
        scanf("%d %d",&a,&b);
        join(a,b);
    }
    printf("%d\n",ans);
    }
    return 0;
}

【3D Slicer】的小白入门使用指南一 3D Slicer 是一个免费的开源软件平台,用于医学、生物医学和其他 3D 图像的可视化、处理、分割、配准和分析。Slicer 的功能包括:读/写。 阅读详情

相关推荐

封包(一)(雷电模拟器+ProxyDroid+查尔斯3.93+WPE)

自从换了工作就没有给大家分享一些干活,在加上陪伴自己的孩子没有时间更新文章了,这只能在晚上给大家写文档了,我最近在游戏公司上班,研究封包。我把这些东西都做成了笔记,我想有些东西是大家都想弄明白d ...

寒梅独自开 1万+

10.算法习题之并查集

算法习题之并查集

sam475259540的博客 205

手把手教你用VS Code + Codex在WSL中高效编程(避坑指南)

本文提供了一份详细的避坑指南,教你如何在WSL环境中高效配置和使用VS Code与OpenAI Codex。文章核心在于解决WSL内Codex扩展的OAuth登录失败问题,推荐将扩展安装在Windows本地,并通过UNC路径直接访问WSL文件系统,从而实现AI辅助编程与Linux开发环境的无缝结合,提升编码效率。

weixin_28677451的博客 1065

并查集经典题目

题目一:How Many Answers Are Wrong #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 200005; int p[N],d[N]; //p为集合,d为边权值 int m,n; //m个数字,n次操作 int find(int x) { if(x!=p[x]) {

nidayededaye2的博客 362

Cadence导入tsmcN65GP PDK的完整流程与常见问题解析

本文详细介绍了Cadence导入tsmcN65GP PDK的完整流程,包括文件解压、目录结构解析、安装脚本运行及Cadence集成配置。重点解析了常见问题如文件路径错误、权限问题和工艺库显示不全的解决方案,并提供了实战技巧与优化建议,帮助用户高效完成PDK安装与配置。

weixin_29215391的博客 546

Fluent温度超限调试:从能量方程到网格优化的实战指南

本文深入解析Fluent中温度超限问题的诊断与解决方法,从能量方程机制到网格优化策略,提供实战指南。通过分析温度与焓的换算关系,探讨典型场景如能量方程发散、局部网格质量差等,并给出五步调试法及高级命令应用,帮助工程师有效解决温度计算异常问题。

weixin_29045585的博客 530

并查集(详解+例题)

问题3:如何合并两个集合:p[x]是x的集合编号,p[y]是y的集合编号。询问两个元素是否在一个集合中。每个集合用一颗树表示。(这里会优化后面,通过。

m0_67717626的博客 1838

SAP期初库存导入 (1)

LSMW

IT养家 7192

并查集(带题分析)

1,合并:将两个集合 合并2,询问:询问两个元素是否在一个集合中。

韩帅的博客 1032

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(二)

《拉依达的嵌入式\驱动面试宝典》 整合了所有我认为可能遇到的技术面试问题。所有问题及其答案均是我个人学习后查阅资料总结,每个回答都做了仔细的分析,在嵌入式及其驱动面试相关问题解析做到全网独一无二。学习或者转行到嵌入式、驱动开发领域学习的不二之选

拉依达不拉跨的博客 578

4、接收天线:接收电压、功率和传输系数

本文详细探讨了接收天线的性能参数,包括接收电压、功率和传输系数,通过建立等效电路模型分析接收偶极子的电流和开路电压,并定义电压和功率传输函数。研究揭示了天线长度、工作频率及极化失配对传输性能的影响,并提出了优化接收天线性能的策略,为天线系统的设计与优化提供了理论支持。

ll5678的博客 233

并查集详解+例题合集

擒贼先擒王——解密犯罪团伙: 没错,就是他们,为了下层劳动阶级的利益开始扰乱朝廷治安了。 虽然他们是一家人,但是这些好汉们分成了许多队伍分开出动,我们需要做的是确定他们分成了多少个队伍。 我们先来了解一下并查集: 并查集,并查集是一种树形结构,又叫“不相交集合”,保持了一组不相交的动态集合,每个集合通过一个代表来识别,代表即集合中的某个成员,通常选择根做这个代表。 并查集,并查集是一种树形结构,...

Bearing in mind forever! 750

智驾芯片新天团!NVIDIA Thor vs 高通8797 vs 蔚来神玑NX9031,2025-2026谁能称王?

应用场景推荐芯片理由高阶NOA + L4 Robotaxi千TOPS以上,满足BEV+TransformerL2+/L3级别NOAThor-U / 高通8797算力适中,功耗控制佳,生态成熟经济型城市NOAThor-Z / S性价比均衡,适合前装普及自研平台一体化NX9031华为之外最强自研整合方案📌 TOPS不再是天花板,GPU、带宽、功耗、上市时间和车企绑定都是决胜关键📌 Thor系列仍然统治高端,但国产神经元开始觉醒📌 智驾芯片的选择,从“强”走向“适合场景”

weixin_43199439的博客 2646

并查集详解附例题

将两个元素和平到一个集合中,体现在数据结构上,就是将两颗子树合并成一颗大树,只需要将其中一颗子树的根结点与另外一颗子树的根节点连接即可。并查集是一种用于管理元素所属集合的数据结构,实现为一个森林,其中每棵树表示一个集合,树中的节点表示对应集合中的元素。初始时,每个元素都位于一个单独的集合,表示为一棵只有根节点的树。合并时,将哪颗子树的根节点作为新的根结点是一个问题,这一步操作会影响后续操作的复杂性,在查询过程中的每个结点,我们可以将他们直接连接到根结点,大大加快后续查询速度。

hanhatec的博客 400

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

并查集详解与例题

超容易理解超详细的并查集详解(一个大佬写的超详细):并查集详解 LeetCode 547 省份数量 class Solution { public: vector<int> father; int find(int x) { // 查父节点 int root = x; while (father[root] != -1) { root = fat

peachzy的博客 453

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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

并查集的概念和代码实现

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

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

并查集(Disjoint Set)详解+例题

并:合并 查:查询 集:集合 1.初始化:把每个点所在集合初始化为其自身; 2、合并:将两个元素所在的集合合并为个集合。 3、查找:查找元素所在的集合即根节点; 深度不要太大 union find ...

关注网络安全、云原生安全 2068

并查集和例题详解

5 52 1 21 1 32 1 31 2 32 1 2int pre[N];​int main()int n, m;i <= n;else{​return 0;

2301_79921837的博客 403

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

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

m0_73557680的博客 342

对并查集的理解,以及例题(The Suspects )详解

并查集其实说白了,他和寻找最小祖先有着异曲同工之妙,并查集的作用主要在于,寻找哪些数是属于同一个集合,只需要找到这个集合的首要元素,即二叉树中的根节点,就可以根据这个首要的原素,找到这个集合中的所有元素。下面请看例题 Problem describe: Severe acute respiratory syndrome (SARS), an atypical pneumonia of unkno...

weixin_44313771的博客 354

POJ 2492 并查集,带权或带偏移量并查集 【例题详解】

  分析这道题,我们可以得出,假如a,b,c三只虫子,a和b可以交配,b和c也可以交配,那么a和c一定是同行,因为他们和同一个异性交配了。所以我们可以把关系抽象成图,在ab之间,bc之间各连一条线长度为1,那么路径长度为双数的两个点一定是同性,单数则为异性。仔细考虑我们不难发现,这是因为性别只有两种,跨越性别单数次称之为异性,跨越性别双数次称之为同性。   然后我们可以采用建...

daxian3723的博客 181

并查集-算法详解及例题(最小生成树问题)

一、并查集的概念: 并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的 Kruskal 算法和求最近公共祖先(Least Common Ancestors, LCA)等。 使用并查集时,首先会存在一组不相交的动态集合 S={S1,S2,⋯,Sk}S={S1,S2,⋯,Sk},一般都会使用一...

Gaoithe的博客 1157

【并查集】模板 + 【HDU 1213、HDU 1232、POJ 2236、POJ 1703】例题详解

不想看模板,想直接看题目的请戳下面目录: 目录: HDU 1213 How Many Tables【传送门】 HDU 1232 畅通工程 【传送门】 POJ 2236 Wireless Network 【传送门】 POJ 1703 Find them, Catch them 【传送门】 先上模板: #define MAXN 根据编号需要 int per[MAXN],rank[MAX...

lesileqin的博客 283

并查集具体例题使用详解(力扣200岛屿数量)

因为当依次遍历查找元素的时候,查找的顺序是始终向右以及向下的,既这个元素无论如何都会被判断一次是否为1,便不需要再向右或下判断是否同为1,当遍历到这个数时,向上或向左判断就足够确认是否在同一个集合内了,即使不向右判断,下一次遍历也会跑到右边的元素身上,然后再向左向上判断是否为同为1(向下同理);而利用并查集的方法,可以设每一个1是一个单独的集合,然后从第一行第一列依次往m行n列向四周寻找,当邻接元素为1时,则合并为同一个集合,遇到零则终止该行或列,最后再统计场上剩余的集合数量,便得到岛屿数量;

2301_81192408的博客 487

CSP-Week6 ProblemB 并查集详解和例题(POJ - 1611)

CSP-普适结构–并查集 文章目录CSP-普适结构--并查集知识简述题目概述INPUT&输入样例OUTPUT&输出样例题目重述思路概述题目源码 知识简述 并查集是一种图论中十分常见的数据结构,在联通模块和生成树问题中具有十分重要的作用,因此并查集是在程序设计中必须掌握的知识模块。 正如其名,并查集结构主要关注两个方面: 1、并操作 2、查操作 要组织这种结构,可以使用各种各样的数据...

qq_43942251的博客 403
上一篇: MapReduce工作原理及流程
下一篇: 最小生成树算法Kruskal详解
Yolo_Fs
博客等级 码龄9年 41粉丝 46原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值