力扣1319.连接网络的操作次数——python解答

这题我们发现他是利用连接数来计算,我们很清晰之前很多这样的题用并查集来解决,这次我们同样。
我们要明白,连接n个,至少要n-1条线,所以我么的线一定大于等于n-1,否则返回-1,之后我们在并查集里加入数量,连接一次,线减少一次,最后返回数量再-1就可以了。

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

    def __init__(self, n):
        """长度为n的并查集"""
        self.parent = [i for i in range(n)]
        self.count = n
    def find(self, x):
        """查找p的根结点(祖先)"""
        if x != self.parent[x]:
            self.parent[x] = self.find(self.parent[x])
        return self.parent[x]

    def union(self,x1, x2):
        root_x, root_y = self.find(x1), self.find(x2)

        if root_x != root_y:
            self.parent[root_x] = root_y
            self.count -= 1
class Solution:
    def makeConnected(self, n: int, connections: List[List[int]]) -> int:
        num = len(connections)
        if n > num+1:
            return -1
        uf = UnionFind(n)
        for x in (connections):
            uf.union(x[0], x[1])
        return uf.count - 1

这里我们还是用列表来表示并查集。

你可能感兴趣的:(python,python,leetcode)