news 2026/9/25 1:16:52

代码随想录 并查集理论基础

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
代码随想录 并查集理论基础

一、背景

1.并查集可解决的问题:并查集常用来解决连通性问题。也就是说当我们需要判断两个元素是否在同一个集合里的时候,就想到要用并查集。

2.并查集的功能:

(1)将两个元素添加到一个集合中。

(2)判断两个元素在不在同一个集合。

二、原理:从代码层面上讲,如何将两个元素添加到同一个集合中?

1.错误想法:

(1)放到同一个数组或者set或者map中,这样就表示两个元素在同一个集合(但是这么多元素分门别类,可不止一个集合,可能是成百上千个集合,这时会定义很多的数组,不好实现)。

(2)定义一个二维数组(但是如果要判断两个元素是否在同一个集合的时候,只能把二维数组都遍历一遍;每当想添加一个元素到某集合的时候,依然需要把二维数组都遍历一遍,才知道要放到哪个集合里,代码实现逻辑非常复杂)。

2.正确思路:

(1)将三个元素A,B,C(分别是数字)放在同一个集合,其实就是将三个元素连通在一起,如何连通?只需要用一个一维数组来表示,即:father[A] = B,father[B] = C,这样就能表述A与B与C连通了(有向连通图)。

代码如下所示:

// 将v,u 这条边加入并查集 void join(int u, int v) { u = find(u); // 寻找u的根 v = find(v); // 寻找v的根 if (u == v) return; // 如果发现根相同,则说明在一个集合,不用两个节点相连直接返回 father[v] = u; }

(2)find函数的寻根过程,就是通过数组下标找到数组元素,然后一层一层地寻根,代码如下所示。

// 并查集里寻根的过程 int find(int u) { if (u == father[u]) return u; // 如果根就是自己,直接返回
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/25 2:15:38

CSS小白必学:5分钟掌握文本溢出省略技巧

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个面向初学者的CSS教程示例,逐步讲解如何实现文本溢出显示省略号。要求:1. 从最基础的white-space/text-overflow属性讲起 2. 包含可视化示意图 3. 提…

作者头像 李华
网站建设 2026/9/23 21:08:09

15分钟构建可演示的AI容器化POC

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个端到端的AI演示系统:1) 使用预训练模型容器实现实时图像分类;2) 轻量级Web界面接收用户上传图片;3) 可视化推理结果和性能指标。要求&am…

作者头像 李华
网站建设 2026/9/25 4:17:10

告别低效:UTools如何节省开发者50%的时间

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个UTools插件,用于统计和分析用户的操作效率。插件应记录常用操作的时间消耗,提供优化建议,并展示使用UTools前后的效率对比图表。支持导出…

作者头像 李华
网站建设 2026/9/23 21:07:42

零基础图解教程:.deb安装就像手机装APP一样简单

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个面向Linux新手的.deb安装教学应用,功能包括:1. 交互式安装向导 2. 实时命令解释 3. 常见错误动画演示 4. 安全安装检查 5. 学习进度跟踪。要求使用大…

作者头像 李华
网站建设 2026/9/23 21:07:27

零基础玩转Phyfusion:你的第一个物理模拟项目

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 设计一个面向新手的Phyfusion入门教程项目。要求:1. 分三步实现弹跳球基础模拟(创建场景→添加物理属性→运行);2. 每个步骤提供可视…

作者头像 李华
网站建设 2026/9/24 22:22:43

1小时开发:用Python打造专属批量改名工具

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个基于Python的快速批量改名工具原型。要求提供图形界面,支持:1) 选择文件或文件夹 2) 设置命名规则(前缀、后缀、序号、日期等&#xff0…

作者头像 李华