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

数据结构:并查集

并查集是一种 树型数据结构,主要用来处理 集合的合并与查询 问题。
它的核心功能有两个:
Find(查询):查询某个元素属于哪个集合(找到集合的代表/根)。
Union(合并):将两个集合合并成一个集合。
每个集合用一棵树表示,树根是集合的代表。
每个元素存一个 父亲指针(parent[i]),指向它的父节点。
如果 parent[i] == i,说明它是根节点。
解决简单并查集问题的步骤:
1.声明数据集合,并初始化

int f[1005];
for(int i=1;i<=n;i++)
{f[i]=i;
}

2.查找是否在同一个集合(通过查是否是同一个根来判断)

int a;
int b;
int la=find(a);
int lb=find(b);
int find(int x)
{if(x==f[x]){return x;}else{f[x]=find(f[x]);return f[x];}}

3.判断是否在同一个集合中,如果没有添加进去,添加的方法就是将其中一个的根的根设置成另外一个

if(la==lb)
{说明在同一个集合中
}
else
{f[la]=lb;
}

查找的时候可以进行路径压缩

为啥会有路径压缩呢,因为在查找一个数据的根是谁的过程中,会遇到其他根与之相同的数据,它们的根是相同的,我们没有必要重复查询,在查询一个的过程中,把其他数据的根也改为总的根

int find(int x) {if (f[x] != x)f[x] = find(f[x]);  // 递归时顺便把父亲指针直接指向根return f[x];
}

使用场景:
判断两个元素是否属于同一个集合(连通性问题)。
网络连通、朋友圈、最小生成树(Kruskal 算法)。
图论里常见的连通分量问题。
传统的并查集一般不会出题,
一种是其他算法和并查集结合
并查集 + 其他算法结合
这是最常见的考点。常见搭配有:
Kruskal 最小生成树
用并查集判断加入一条边后是否会产生环。
网络连通/岛屿数量
DFS/BFS 可以做,但也可以用并查集维护连通块数。
动态连通性问题
比如给你一堆操作(合并、查询是否在同一集合),并查集比 DFS/BFS 高效。
另一种是出种类并查集,一般是两个种类
维护一些对立关系,比如敌人的敌人是朋友时,正常的并查集就很难满足我们的需求这时种类并查集(扩展域并查集)就诞生了。
三个种类一般遇不到。


文章转载自:

http://fWnSMJXo.hyfrd.cn
http://BkGBPMLG.hyfrd.cn
http://PJrK0zwR.hyfrd.cn
http://M8n6jNZT.hyfrd.cn
http://0vuRtdeM.hyfrd.cn
http://JRaLx8wC.hyfrd.cn
http://8iXFaJyt.hyfrd.cn
http://S8cCUUh2.hyfrd.cn
http://0uwvkInA.hyfrd.cn
http://ZuBxr5bo.hyfrd.cn
http://Af361NoJ.hyfrd.cn
http://Xa6uJm55.hyfrd.cn
http://cXVUIYPL.hyfrd.cn
http://cKULgeKX.hyfrd.cn
http://DiKQzsy9.hyfrd.cn
http://G3n0lNe8.hyfrd.cn
http://uDLyovAt.hyfrd.cn
http://YIml5Qy0.hyfrd.cn
http://EGfHfv0V.hyfrd.cn
http://t1wm4Fle.hyfrd.cn
http://HVruXGYm.hyfrd.cn
http://EtIG1lt8.hyfrd.cn
http://HuI1AX5n.hyfrd.cn
http://rYX88p1f.hyfrd.cn
http://m75CawVr.hyfrd.cn
http://UMcnBpwb.hyfrd.cn
http://hcBZmoQ5.hyfrd.cn
http://HRBCv816.hyfrd.cn
http://GZKyDLTq.hyfrd.cn
http://YsJ0iXcj.hyfrd.cn
http://www.dtcms.com/a/379740.html

相关文章:

  • Unity Addressable System 本地服务器功能验证
  • 用简单的日期类巩固C++类与对象基本知识
  • python+springboot+uniapp微信小程序题库系统 在线答题 题目分类 错题本管理 学习记录查询系统
  • DeepSeek v3.1和DeepSeek R1在编程风格方面的区别
  • kafka启动小脚本
  • AI-调查研究-76-具身智能 当机器人走进生活:具身智能对就业与社会结构的深远影响
  • 机器学习-机器学习模型简介
  • sVLMs之:《SmolVLM: Redefining small and efficient multimodal models》的翻译与解读
  • 【GPT入门】第67课 多模态模型实践: 本地部署文生视频模型和图片推理模型
  • 机器学习-探索性数据分析
  • AVL树旋转全解析:四步让失衡二叉树“华丽转身”
  • 一文学会CMakeLists.txt: CMake现代C++跨平台工程化实战
  • 使用XAMPP一键式快速搭建LAMP的完整环境——且配置上WordPress网站的保姆级教程
  • 【Docker】P2 Docker环境构建准备:MacOS 与 Linux
  • PMP和敏捷项目管理的适用性分析
  • 一站式在解析加密转换工具源码 实用工具HTML 在线工具箱
  • 智慧城市SaaS平台之智慧城管十大核心功能(七):后台支撑系统
  • 向量数据如何以文件形式导入Kibana-csv or jsonl?
  • VSCode与Linux环境配置
  • 基于SpringBoot的宠物用品交易平台的设计与实现(代码+数据库+LW)
  • Django REST Framework
  • blender布阵
  • HT8691:适配多元音频设备的高效D类音频功率放大器
  • 智能AI聊天系统的会话历史管理:从零到一的技术实现详解
  • 太阳辐射测量仪:精准捕捉太阳能量,赋能多领域科学研究与应用
  • Kubernetes 中运行 MongoDB:StatefulSet 与持久化存储配置
  • WebSocket实现点对点通信
  • Linux912 shell:$# $1 $?;RHEL 8 AppStream BaseOS
  • python 从pycharm部署到新环境
  • C++(友元和运算符重载)