def main(): uf = UnionFind(10) nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] uf.unify(0, 1) uf.unify(2, 3) uf.unify(4, 5) uf.unify(6, 7) uf.unify(8, 9) for num in nums: print(num, uf.find(num)) uf.unify(1, 3) uf.unify(5, 7) uf.unify(6, 9) for num in nums: print(num, uf.find(num)) for num in range(uf.size): if uf.id[num] == 4: print(num)
from UnionFind import UnionFind lines = """4 7 1 0 1 0 0 1 0 2 3 1 0 1 1 1 2 0 0 2 1 1 3""" lines = lines.split("\n") n, q = [int(i) for i in lines[0].split()] disjoint = UnionFind(n) for i in range(1, q + 1): typ, p, q = [int(j) for j in lines[i].split()] if typ == 0: disjoint.unify(p, q) else: print(1 if disjoint.connected(p, q) else 0)
from UnionFind import UnionFind unionFind = UnionFind(5) assert unionFind.components() == 5 unionFind.unify(0, 1) assert unionFind.components() == 4 unionFind.unify(1, 0) assert unionFind.components() == 4 unionFind.unify(1, 2) assert unionFind.components() == 3 unionFind.unify(0, 2) assert unionFind.components() == 3 unionFind.unify(2, 1) assert unionFind.components() == 3 unionFind.unify(3, 4) assert unionFind.components() == 2 unionFind.unify(4, 3) assert unionFind.components() == 2 unionFind.unify(1, 3) assert unionFind.components() == 1 unionFind.unify(4, 0) assert unionFind.components() == 1