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; }

相关新闻

MRI放射组学与免疫微环境在子宫内膜癌保育治疗中的应用

MRI放射组学与免疫微环境在子宫内膜癌保育治疗中的应用

1. 项目背景与临床意义子宫内膜癌作为妇科常见恶性肿瘤,传统治疗方案以全子宫切除为主。但对于有生育需求的年轻患者,保育治疗(fertility-sparing treatment)成为重要选择方向。北京大学人民医院王建六教授团队发表在MedComm&…

2026/7/27 8:04:46 阅读更多 →
内存补丁与DLL劫持实战:逆向工程中的程序行为修改技术

内存补丁与DLL劫持实战:逆向工程中的程序行为修改技术

1. 项目概述:一场关于程序“心脏”与“血管”的攻防博弈逆向工程实战,听起来像是电影里黑客的专属领域,但本质上,它是一场深入软件内部、理解其运行逻辑的深度探索。今天我们要聊的“从内存补丁到DLL劫持”,正是这场探…

2026/7/27 8:04:46 阅读更多 →
百度文心一言AI对话工具核心技术解析与应用实践

百度文心一言AI对话工具核心技术解析与应用实践

1. 文心一言:百度AI对话工具的核心能力解析文心一言作为百度推出的AI对话工具,在中文场景下展现出强大的多轮对话、文本生成和知识问答能力。这款工具基于百度多年积累的自然语言处理技术,专门针对中文语境优化,能够理解复杂的语义…

2026/7/27 8:04:46 阅读更多 →

最新新闻

Dart之数据类型

Dart之数据类型

一、前言学习 Dart 数据类型时,可以先想象一个超市。超市里有饮料、蔬菜、水果、零食、日用品。不同商品不能全部随便塞进同一个容器里:鸡蛋需要防摔的盒子,饮料需要瓶子,散装糖果需要袋子,冷冻食品需要冷柜。代码里的…

2026/7/27 8:14:50 阅读更多 →
炉石传说HsMod插件:32倍速加速与200+皮肤定制完全指南

炉石传说HsMod插件:32倍速加速与200+皮肤定制完全指南

炉石传说HsMod插件:32倍速加速与200皮肤定制完全指南 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是一款基于BepInEx框架开发的炉石传说游戏增强插件,为玩家…

2026/7/27 8:14:50 阅读更多 →
Frida动态注入技术:绕过安卓APP抓包检测的三种实战方案

Frida动态注入技术:绕过安卓APP抓包检测的三种实战方案

1. 项目概述:当抓包工具遇上“隐身”的APP搞安卓逆向和渗透测试的朋友,估计都遇到过这种让人头疼的情况:你兴冲冲地打开Burp Suite或者Charles,配置好代理和证书,准备对目标APP来一波流量分析,结果APP一启动…

2026/7/27 8:14:50 阅读更多 →
儿童LLM聊天机器人拟人化交互技术解析与开发实践

儿童LLM聊天机器人拟人化交互技术解析与开发实践

儿童与LLM聊天机器人互动中拟人化现象的技术解析与实践指南 在当今AI技术快速发展的时代,LLM(大语言模型)聊天机器人已经成为儿童教育和娱乐的重要工具。然而,儿童在与这些AI系统互动时表现出的拟人化倾向,即把机器当作…

2026/7/27 8:14:50 阅读更多 →
360加固APP逆向全流程解析:从脱壳到签名的实战避坑指南

360加固APP逆向全流程解析:从脱壳到签名的实战避坑指南

1. 项目概述:为什么我们需要一份“避坑指南”?如果你在移动安全或者逆向工程这个圈子里待过一段时间,听到“360加固”这个名字,大概率会眉头一皱。它几乎是国内Android应用加固领域的代名词,以其高强度、多变的保护方案…

2026/7/27 8:14:50 阅读更多 →
北数云智能体平台:AI驱动的专业场景解决方案

北数云智能体平台:AI驱动的专业场景解决方案

1. 北数云智能体平台内测深度体验 作为一名长期关注AI应用落地的技术博主,我有幸获得了北数云平台的内测资格。经过一周的深度使用,这个聚焦"智能体"概念的AI云平台确实给我带来了不少惊喜。与市面上常见的通用型AI工具不同,北数云…

2026/7/27 8:13:50 阅读更多 →

日新闻

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:54 阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/27 4:33:59 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/27 6:31:56 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/27 4:01:12 阅读更多 →

月新闻