目录

数据结构(七):并查集

目录
  • 并查集(Union Find)也叫「不相交集合(Disjoint Set)」,是一种树型的数据结构,专门用于 动态处理 不相交集合的「查询」与「合并」问题
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
class DSU:
    def __init__(self,n):
        self.f = list(range(n))
        self.sz = [1]*n
        self.cc = n
    
    def find(self,x):
        if self.f[x]!=x:
            self.f[x] = self.find(self.f[x])
        return self.f[x]
    
    def union(self,x,y):
        f,sz = self.f,self.sz
        fx,fy = self.find(x),self.find(y)
        if fx==fy:
            return False
        if sz[fx]>sz[fy]:
            fx,fy = fy,fx
        f[fx] = fy
        sz[fy] += sz[fx]
        self.cc -= 1
        return True

例题

  • 0200 岛屿数量
  • 0547 省份数量
  • 0684 冗余连接
  • 0839 相似字符串组
  • 0990 等式方程的可满足性
  • 0130 被围绕的区域
  • 0695 岛屿的最大面积
  • 0721 账户合并
  • 0959 由斜杠划分区域
  • 0399 除法求值
  • 0407 接雨水 II
  • 0685 冗余连接 II
  • 0803 打砖块