1. 并查集基础概念与实现
并查集(Disjoint Set Union,DSU)是一种处理不相交集合合并及查询问题的数据结构。它主要支持两种操作:查找(Find)和合并(Union)。我在实际项目中多次使用这种数据结构解决网络连通性问题,它的高效性常常让人惊喜。
1.1 核心操作原理
并查集的核心思想是用树结构表示集合,其中每个节点指向其父节点。根节点指向自己,代表这个集合的标识。Find操作通过递归查找父节点直到根节点,Union操作则将两个集合的根节点连接。
python复制class DSU:
def __init__(self, n):
self.parent = [i for i in range(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, x, y):
rootX = self.find(x)
rootY = self.find(y)
if rootX != rootY:
self.parent[rootX] = rootY
注意:路径压缩技术使Find操作接近O(1)时间复杂度,这是并查集高效的关键。
1.2 实际应用场景
我在处理社交网络好友关系时使用过并查集。比如判断两个人是否属于同一个朋友圈,或者合并两个朋友圈。算法竞赛中常见的应用包括:
- 判断图中两个节点是否连通
- Kruskal算法中的最小生成树构建
- 图像处理中的像素区域合并
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 种类并查集进阶应用
种类并查集(也叫扩展域并查集)能处理更复杂的关系类型,比如敌人的敌人是朋友这种逻辑。我在解决"食物链"问题时深刻体会到了它的强大。
2.1 实现原理
基本思路是为每个元素创建多个"分身",代表不同种类或状态。对于大小为n的问题,我们通常需要2n或3n的空间:
python复制class KindD
