python 并查集代码

class UnionFind(object):
    """并查集类"""

    def __init__(self, n):
        """长度为n的并查集"""
        self.uf = [-1 for i in range(n + 1)] # 列表0位置空出
        self.sets_count = n  # 判断并查集里集合的数量

    def find(self, p):
        """查找p的根结点(祖先)"""
        r = p
        while self.uf[p] > 0:
            p = self.uf[p]
        while r != p:
            self.uf[r], r = p, self.uf[r]
        return p
    def union(self, p, q):
        """连通p,q 让q指向p"""
        proot = self.find(p)
        qroot = self.fing(q)
        if proot == qroot:
            return
        if self.uf[proot] > self.uf[qroot]:
            self.uf[proot] = qroot
            self.uf[qroot] += self.uf[proot]
        else:
            self.uf[qroot] = proot
            self.uf[proot] += self.uf[qroot]

        self.sets_count -= 1



    def is_connected(self, p, q):
        """判断pq是否已经连通"""
        if self.find(p) == self.find(q):
            return True
        else:
            return False


更多优质资源在我的公众号“一个直男的救赎之路”:

mark

公众号主要分享的知识包括:人工智能,计算机视觉,算法,编程语言学习(python,java,c/c++),大学生竞赛,学习方法心得,好书推荐等,欢迎您一起交流和学习。公众号也会经常分享一些优质资源和教学视频,电子书等。
回复以下内容,即可获取千G学习资源!
--------
算法
人工智能
python
C语言
蓝桥杯
--------

你可能感兴趣的:(蓝桥杯,python,算法)