Exemple #1
0
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)
Exemple #2
0
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