以下是一个简单的并查集实现:

class UnionFind:
    def __init__(self, n):
        self.parent = [i for i in 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, x, y):
        x_root = self.find(x)
        y_root = self.find(y)
        if x_root == y_root:
            return
        if self.rank[x_root] < self.rank[y_root]:
            self.parent[x_root] = y_root
        elif self.rank[x_root] > self.rank[y_root]:
            self.parent[y_root] = x_root
        else:
            self.parent[y_root] = x_root
            self.rank[x_root] += 1

在这个实现中,我们使用两个数组来保存每个节点的父节点和秩。在初始化时,每个节点的父节点都是它自己,秩为0。find方法用于查找给定节点的根节点,使用路径压缩来加速查找过程。union方法用于将两个节点所在的集合合并,使用秩来避免树的深度过大,从而保证操作的时间复杂度。


原文地址: https://www.cveoy.top/t/topic/wOU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录