尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

并查集题解:合并之前,先问清楚关系会不会传递

并查集题解:合并之前,先问清楚关系会不会传递
📅 发布时间:2026/7/3 22:36:45

并查集题解:合并之前,先问清楚关系会不会传递

并查集适合解决“连通性”和“等价关系”问题。很多题一看到合并就想用并查集,但并不是所有关系都能合并。使用前先问:这个关系是否传递?如果 A 和 B 同组,B 和 C 同组,是否能推出 A 和 C 同组?

并查集不是万能胶水。关系能传递,才适合粘。

一、并查集的核心操作

并查集只有两个核心操作:find 找代表,union 合并集合。

flowchart TD A[元素 x] --> B[find(x)] C[元素 y] --> D[find(y)] B --> E{代表是否相同} D --> E E -->|否| F[union 合并] E -->|是| G[已经连通]

路径压缩和按秩合并让它非常快,近似 O(1)。

二、代码模板

class DSU: def __init__(self, n): self.parent = list(range(n)) self.rank = [0] * n def find(self, x): if self.parent[x] != x: self.parent[x] = self.find(self.parent[x]) return self.parent[x] def union(self, a, b): ra, rb = self.find(a), self.find(b) if ra == rb: return False if self.rank[ra] < self.rank[rb]: ra, rb = rb, ra self.parent[rb] = ra if self.rank[ra] == self.rank[rb]: self.rank[ra] += 1 return True

union返回是否真的合并,很多题用它判断是否形成环。

三、适用题型

朋友圈、省份数量、冗余连接、岛屿数量、等式方程可满足性,都很适合并查集。它们共同点是关系能传递。

不适合的场景:有方向依赖、最短路径、顺序约束。比如“谁先完成谁”,这不是并查集合并能解决的。

四、复杂度和边界

初始化 O(n),每次 find/union 近似 O(1)。边界要注意编号从 0 还是 1 开始,二维网格映射到一维时不要算错。

idx = r * cols + c

映射错了,并查集会把毫不相干的格子合在一起,结果很有喜剧效果,但提交会很悲剧。

并查集还常用于“等式和不等式”判断。先合并所有相等关系,再检查不等关系是否冲突。顺序很重要,不能边看边随便判断。

def equationsPossible(equations): dsu = DSU(26) for e in equations: if e[1:3] == "==": dsu.union(ord(e[0])-97, ord(e[3])-97) for e in equations: if e[1:3] == "!=" and dsu.find(ord(e[0])-97) == dsu.find(ord(e[3])-97): return False return True

这个例子能说明并查集的典型流程:先建立等价类,再验证约束。它不是用来求路径,而是用来维护集合关系。

五、总结

并查集适合传递关系和连通性问题。核心是 find、union、路径压缩和按秩合并。

合并之前,先问清楚关系会不会传递。能传递,放心粘;不能传递,换工具。

相关新闻

  • LTC6903与PIC18F86J11构建数字控制振荡器方案
  • 实战指南:5步精通MDUT多数据库利用工具的开发与定制
  • 如何解决Godot游戏性能瓶颈:C++扩展开发实战指南

最新新闻

  • STM32F745VG与MC6470 IMU的高性能姿态控制系统设计
  • 机器不消费,人何以生存
  • AI工作流效能瓶颈诊断图谱(含12项指标阈值红线):97.3%的低效根源藏在第3层依赖关系中
  • 小程序购物商城开发实战:从技术选型到运营策略
  • Java后端开发者AI融合学习路线:从Spring Boot到Spring AI实战
  • 基于WSEN-ISDS与TM4C1299KCZAD的6DoF运动跟踪系统设计

日新闻

  • STM32F745VG与MC6470 IMU的高性能姿态控制系统设计
  • 机器不消费,人何以生存

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号