news 2026/5/10 21:20:24

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

作者头像

张小明

前端开发工程师

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/5/8 19:46:39

传奇3韩国新地图怪物和爆率介绍

传奇3韩国新地图怪物介绍韩国版本传奇3通常会推出一些独特的新地图,这些地图中的怪物设计往往与经典版本有所不同。以下是一些可能出现在韩国新地图中的怪物类型:高等级怪物 新地图通常包含等级较高的怪物,攻击力和生命值较强,适合…

作者头像 李华
网站建设 2026/5/1 7:19:36

小白也能懂的连接错误解决指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个交互式新手学习应用:1. 用快递送货比喻网络连接 2. 设计5个常见错误的动画演示 3. 提供一键检测按钮 4. 输出带emoji的简单报告 5. 内置救命按钮连接社区支持。…

作者头像 李华
网站建设 2026/5/1 7:31:23

1小时验证创意:VLA原型开发实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 提供三个可选原型模板:1) 社交媒体自动标注工具 2) 无障碍阅读辅助器 3) 智能相册管理器。用户选择模板后,自动生成对应代码框架和示例数据集。每个模板预置…

作者头像 李华
网站建设 2026/4/27 3:15:11

AI如何用WeClone重构你的开发流程

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个基于WeClone的AI辅助开发工具,能够分析现有项目代码库,自动生成相似功能的代码片段或完整模块。支持多种编程语言,具备智能补全、错误检…

作者头像 李华
网站建设 2026/5/10 10:57:06

Gradle插件异常?新手也能轻松搞定

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个面向Gradle新手的交互式学习工具,专门讲解org.gradle.api.internal.plugins.pluginapplicationexception: failed错误的处理。包含:1. 基础概念讲解…

作者头像 李华