c++高级数据结构之并查集

发布时间:2026/7/27 8:05:47

c++高级数据结构之并查集
一.相关原理1.概念首先我们得明晰并查集在图形层面是什么——一片森林也就是很多个不相交的集合(很多棵树)。2.表示方式像堆那样用数组存储每一个人:一开始给这些学生编好号数组下标就是他们对应的编号。一段时间后大家熟络组成不同小群体编号012的同学担任队长这些同学间产生了联系。以上的三棵树就可以说是一个并查集(森林)。这是形成森林后的存储情况。结论:注:一开始的数组中数组元素要均为-1。因此存储用的是双亲表示法数组中的元素可根据正负区分出谁是父亲谁是孩子。数组元素为负数负号代表父节点其绝对值代表整棵树(集合)节点的数量数组元素为非负数代表子节点且元素的值代表该子节点所在树的根节点的下标。数组下标表示每个节点的编号。3.如何合并两棵树需要去合并两棵树的根节点在存储中的操作以下图为例1合并到0上就是将1对应的值-3加给0对应的值-4随后1对应的值变成0此刻的1不再是大哥转而做了0的小弟。合并后的示意图:二.并查集的实现在理解实现之前如果对map的重载[]不太熟悉的读者可参考笔者这篇文章cpp数据结构之map1.给人名建立人与编号的映射关系代码:#pragma once #includemap//利用map和set做到根据编号找人人找编号的映射关系。 #includevector templateclass T class UnionFindSet { public: UnionFindSet(const T* a, size_t n) { for (int i 0; i n; i) { _a.push_back(a[i]);//将姓名导入vector _indexMap[a[i]] i;//map的[]的特性——给key,返回value,还有插入的功能由此可在map中做映射 } } private: vectorT _a;//数组下标就是名字的编号根据编号找人 mapT, int _indexMap;//利用map,根据人找编号 };测试用例:#includeiostream using namespace std; #includeUnionFindSet.h int main() { string a[] { 张三,李四,王五,赵六 }; UnionFindSetstring ufs(a, 4); return 0; }结果:2.不建立映射关系直接编好号的并查集的实现①.寻根(最核心)//寻根 int FindRoot(int x) { int root x; while (_ufs[root] 0) { root _ufs[root]; } return root; }root一直往上跳不断寻找父节点直到root对应的数组元素为负数便找到了根节点。②.合并//合并 void Union(int x1, int x2) { int root1 FindRoot(x1); int root2 FindRoot(x2); if (root1 root2) { return; } if (root1 root2) { swap(root1,root2);//保证小的节点去做根 } //将root2合并给root1 _ufs[root1] _ufs[root2]; _ufs[root2] root1;//root1开始当小弟它的父节点是root2 }③.是否在同一集合(同一棵树)里bool InSet(int x1, int x2) { return FindRoot(x1) FindRoot(x2); }④.统计集合个数由于数组里的元素为负数就代表这是一个根,只要统计负数的个数就能知道集合的个数。size_t SetSize() { size_t size 0; for (size_t i 0; i _ufs.size(); i) { if (_ufs[i] 0) { size; } } return size; }

相关新闻

小熊猫Dev-C++:你的第一个C++开发环境终极指南

小熊猫Dev-C++:你的第一个C++开发环境终极指南

2026/7/27 7:55:47

小熊猫Dev-C:你的第一个C开发环境终极指南 【免费下载链接】Dev-CPP A greatly improved Dev-Cpp 项目地址: https://gitcode.com/gh_mirrors/dev/Dev-CPP 你是否正在寻找一款轻量级C开发环境?厌倦了复杂配置和臃肿的IDE?小熊猫Dev-C&…

AI驱动营销转型:从碎片化内容到智能品牌建设

AI驱动营销转型:从碎片化内容到智能品牌建设

2026/7/27 7:55:47

1. 营销范式革命:从"大广告"到"碎片化内容"的必然转型上世纪90年代,秦池酒业以6666万元天价夺得央视标王,次年销售额直接从1亿飙升至9.5亿。这种"春晚效应"印证了中心化媒体时代的黄金法则——品牌只需集中火力…

TMS320VC5509A DSP内存架构与外部接口配置实战指南

TMS320VC5509A DSP内存架构与外部接口配置实战指南

2026/7/27 7:55:47

1. 项目概述与核心价值在嵌入式DSP系统开发中,内存架构和外部接口的配置,往往是决定项目成败的关键,却又最容易被新手开发者忽视。我见过太多项目,算法写得漂亮,但一跑起来就卡顿、丢数据,最后追根溯源&…

Kimi 给的代码怎么转换为图片?选用 AI 导出鸭一键转代码效果图,多方案横向测评,适配各类代码格式快速出图

Kimi 给的代码怎么转换为图片?选用 AI 导出鸭一键转代码效果图,多方案横向测评,适配各类代码格式快速出图

2026/7/27 8:55:49

引言 编程学习、程序开发、技术汇报场景里,大家常依靠Kimi生成调试代码、脚本片段。直接截图代码会出现字体扭曲、底色杂乱、行号错位,复制到文档再转图片又容易丢失缩进与语法高亮,普通转换工具无法精准识别代码层级格式。大量程序员、学生、…

基于 W-GAN 的光伏出力场景生成方法研究(Python代码实现)

基于 W-GAN 的光伏出力场景生成方法研究(Python代码实现)

2026/7/27 8:55:49

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 &#x1f381…

AI如何提升学术写作效率:从文献处理到技术路线生成

AI如何提升学术写作效率:从文献处理到技术路线生成

2026/7/27 8:55:49

1. 学术写作痛点与AI解决方案去年指导研究生开题报告时,我注意到一个现象:学生们平均要花费47小时在开题报告的格式调整和内容重构上。这种重复性劳动不仅消耗科研热情,更挤占了本应用于创新思考的宝贵时间。如今,智能写作工具正在…

TI DSP网络开发:HAL硬件抽象层移植实战与驱动开发详解

TI DSP网络开发:HAL硬件抽象层移植实战与驱动开发详解

2026/7/27 8:55:49

1. 项目概述与HAL核心价值在嵌入式网络开发领域,尤其是基于德州仪器(TI)TMS320C6000系列DSP的项目中,实现稳定可靠的网络通信是许多工业控制、音视频处理和通信设备的核心需求。然而,直接让TCP/IP协议栈去操作千差万别…

C55x DSP代码优化实战:从硬件循环到双MAC指令的极致性能调优

C55x DSP代码优化实战:从硬件循环到双MAC指令的极致性能调优

2026/7/27 8:55:49

1. 项目概述:从“能跑”到“跑得快”的C55x DSP代码优化之旅在嵌入式DSP开发领域,尤其是面对像德州仪器C55x这类经典的定点数字信号处理器,我们常常会经历一个从“功能实现”到“性能压榨”的认知跃迁。项目初期,我们用C语言快速搭…

从裸机到RTOS:DSP/BIOS实时调度与性能分析实战

从裸机到RTOS:DSP/BIOS实时调度与性能分析实战

2026/7/27 8:45:49

1. 项目概述:从裸机循环到实时调度系统的演进 在嵌入式数字信号处理(DSP)开发领域,尤其是面对音频流、通信基带或电机控制这类对时序有严苛要求的应用时,开发者常常面临一个核心矛盾:如何在资源受限的处理器…

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

2026/7/27 8:45:59

目标:电脑作为RTSP 服务端,循环推送 H264/H265 视频流; RDK X5 通过 rtsp2display 拉流预览,完全不需要在开发板编译 live555。 提供两套成熟方案: ✅ 方案 A:FFmpeg(最简单,优先推…

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

2026/7/27 8:42:17

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

2026/7/26 0:04:02

说实话,提到PDF拆分再压缩,我真是被折腾得够呛。 上个月公司年度合同归档,一份300多页的PDF总合同,需要按年份拆分成三个独立文件,再分别压缩到10MB以内方便邮件发送各部门确认。我心想这还不简单?先找个海…

多模态 AI 前端工程——图像上传、压缩与流式返回的协同设计

多模态 AI 前端工程——图像上传、压缩与流式返回的协同设计

2026/7/27 0:05:04

多模态 AI 前端工程——图像上传、压缩与流式返回的协同设计 一、多模态对话的「首字节延迟」:上传与流式的协同鸿沟 多模态 AI 应用的前端体验,往往卡在"首字节延迟"上。用户上传一张图片,提一个问题,然后盯着空白对…

【微科普】网红水晶香薰真相拆解:透明固体香薰并非香精结晶,一文理清各类无火香薰释香机理

【微科普】网红水晶香薰真相拆解:透明固体香薰并非香精结晶,一文理清各类无火香薰释香机理

2026/7/27 0:05:04

文章目录第一章 大众普遍存在的认知误区:水晶香薰是芳香烃结晶产物1.1 聚丙烯酸钠凝胶水晶珠体系(市面占比90%家用水晶香薰)1.2 无机盐硬质结晶载体:泻盐与钾明矾香薰原石1.3 植物多糖与PVA整块果冻型水晶香膏1.4 唯一特例&#x…

优启通3.7修改版:深度优化的PE系统维护工具

优启通3.7修改版:深度优化的PE系统维护工具

2026/7/27 0:05:04

1. 项目概述今天要跟大家分享的是一个经过深度优化的PE工具——优启通3.7(2025修改版)。这个版本是在原版基础上进行了大量功能增强和兼容性改进的12月最新版本,特别适合系统维护人员和电脑爱好者使用。作为一个长期从事IT运维的老兵&#xf…