Python実装コードについて


Time: 20190924
class UnionFind:
    def __init__(self, nums):
        #           boss
        self.pre = list(range(nums))
        self.size = [1] * nums
    
    def union(self, x, y):
        px = self.find(x)
        py = self.find(y)

        #   px   size   
        if self.size[px] > self.size[py]:
            px, py = py, px
        #         
        self.pre[px] = py
        self.size[py] += self.size[px]

    def find_recur(self, x):
        #              ~
        if self.pre[x] != x:
            self.pre[x] = self.find(x)
        return self.pre[x]
        
    def find(self, x):
        r = x
        while self.pre[r] != r:
            r = self.pre[r]
            i = x
            while i != r:
                tmp = self.pre[i]
                self.pre[i] = r
                i = tmp
        return r

# Driver code
uf = UnionFind(10)
print(uf.pre)
# 
uf.find(1)
print("  find  :", uf.pre)
uf.union(1,2)
print("  Union  :", uf.pre)
uf.union(2,3)
print("  Union  :", uf.pre)
uf.union(3, 4)
print("  Union  :", uf.pre)

#        
# print(uf.find(1)) # 4
# print(uf.find(2)) # 4
# print(uf.find(3)) # 4
# print(uf.find(4)) # 4

for i in uf.pre:
    print(uf.find(i))

2019.10 Update:
第1回PATアルゴリズムの生放送授業の訓練班の募集の招待状、クリックして詳しく見ることを歓迎します、
END.