当前位置: 首页 > ai >正文

并查集详解

前言

今天,我要来写一篇关于并查集的文章,并查集在各个OIer听来都是个很熟悉的名词,特别是正在学图论的同学们(被最小生成树当头一棒),那么,今天我就来讲讲并查集到底是何方神圣,那位高能,那么,下面进入正题!!!

并查集

并查集的基本运行原理

故事

现在请大家想象几个超级超级大的军队(百万大军或者更多),总所周知,军队分司令、军长、团长等军衔(这不是讲军衔的,不过多介绍,有兴趣者自行百度),由于这几支军队穿的军装是一样的,所以士兵见了面往往不知道是友是敌,而且由于一些特别的原因,军队也没有设置口令(容易被间谍带走),那士兵就犯难了:我该怎么样去辨别这个士兵是不是自己人呢,于是有一天,一位天才少年想出了一个办法,我们只要有一个共同的上司不就是一家人了吗,但是由于军队系统太复杂外加司令经常被调换,所以士兵军官们往往只知道自己的上级是什么,自己的上级的上级就不知道了,于是几只军队通过协商形成了这样的体系:士兵们见了别的士兵,就先向上级询问自己的司令是谁,等到上报到司令的时候司令就一挥手,说:劳资就是司令,回复去吧,于是士兵们就知道司令是谁了,这个就是并查集的基本原理,用来找自己的祖先的。

代码

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

合并两个并查集

故事

那么现在有两支军队握手言和了,但是由于士兵们还遵循着老传统,只要司令不一样就开战,所以这可让两军司令犯了难,想改体系已经不可能了,那该如何解决呢,于是,那位天才少年又出场了:“嗨嗨,只要你们当中的一个认另外一个为上司,那么问题不就解决了吗”,然后这位天才少年就因为让上司认大哥被活活打断了双腿,人办了,问题还是得解决的呀,上司们一合计,那行,就认你当大哥吧,于是问题又解决了。

代码

void join(int x,int y){int i=find(x),j=find(y);if(i!=j)pre[j]=i;
}

路径压缩

故事

那么这套系统运行了很多年,军队的规模也越来越大,连军长的上级的上级的上级×100都有上级了,而我们可怜的士兵依旧还得干架、找上司,士兵们发现,现在找上司要的时间越来越久了,要一天,有这时间士兵们还打什么架呢,所以士兵们通过了一些手段使得那位天才少年又又又出场了,这次,天才少年干脆建议,我们把什么师长旅长团长营长连长排长统统取消,只留下元帅和士兵,所有士兵都归一个人管,所以这位天才少年由于累惨了司令被公开处刑了,同样,还是得解决问题呀,所以上司决定,牺牲自己,让士兵们更好的干架,从此士兵们都有统一的上司了

代码

int find(int x){if(pre[x]!=x)return pre[x]=find(pre[x]);return x;
}
http://www.xdnf.cn/news/18485.html

相关文章:

  • 基于Python的农作物病虫害防治网站 Python+Django+Vue.js
  • 说说你对Integer缓存的理解?
  • 文献阅读笔记【物理信息机器学习】:Physics-informed machine learning
  • 【秋招笔试】2025.08.23美团研发岗秋招笔试题
  • SpringBoot applicationContext.getBeansOfType获取某一接口所有实现类,应用于策略模式
  • 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第五章整理
  • 墨刀原型设计工具操作使用指南及实践操作
  • 玩转Vue3高级特性:Teleport、Suspense与自定义渲染
  • 【假设微调1B模型,一个模型参数是16bit,计算需要多少显存?】
  • 【ABAP4】创建Package
  • 【力扣 Hot100】每日一题
  • Agent原理、构建模式(附视频链接)
  • 深度解析Bitmap、RoaringBitmap 的原理和区别
  • 讲点芯片验证中的统计覆盖率
  • 【攻防世界】easyupload
  • 量子计算驱动的Python医疗诊断编程前沿展望(上)
  • WSL Ubuntu数据迁移
  • 【数据分析】宏基因组荟萃分析(Meta-analysis)的应用与实操指南
  • 容器安全实践(三):信任、约定与“安全基线”镜像库
  • 应用篇#1:YOLOv8模型在Windows电脑摄像头上的部署
  • 26.内置构造函数
  • c# .net支持 NativeAOT 或 Trimming 的库是什么原理
  • 数据库优化提速(三)JSON数据类型在酒店管理系统搜索—仙盟创梦IDE
  • python企微发私信
  • 【React ✨】从零搭建 React 项目:脚手架与工程化实战(2025 版)
  • 文字学的多维透视:从符号系统到文化实践
  • 2025年09月计算机二级MySQL选择题每日一练——第五期
  • Go语言实战案例-Redis连接与字符串操作
  • 井云智能体封装小程序:独立部署多开版 | 自定义LOGO/域名,打造专属AI智能体平台
  • IDEA控制台乱码(Tomcat)解决方法