gumgum's Garden🌼

Disjoint Set

Disjoint set data structure

def find(A, X):
    p = A[X - 1]
    if p == X:
        return X
    else:
        A[X - 1] = find(A, p)
        return A[X - 1]

def unionSet(A, X, Z):
    pX = find(A, X)
    pZ = find(A, Z)
    A[pX - 1] = pZ
Union By Rank
def find(A, X):
    p = A[X - 1]
    if p == X:
        return X
    else:
        A[X - 1] = find(A, p)
        return A[X - 1]

def unionSet(A, X, Z, rank):
    pX = find(A, X)
    pZ = find(A, Z)
    if pX == pZ: return
    if rank[pX] < rank[pZ]:
        A[pX - 1] = pZ
    elif rank[pX] > rank[pZ]:
        A[pZ - 1] = pX
    else:
        A[pX - 1] = pZ
        rank[pZ - 1] = rank[pZ - 1] + 1
Union By Size
def find(A, X):
    p = A[X - 1]
    if p == X:
        return X
    else:
        A[X - 1] = find(A, p)
        return A[X - 1]

def unionSet(A, X, Z, size):
    pX = find(A, X)
    pZ = find(A, Z)
    if pX == pZ: return
    if size[pX] < size[pZ]:
        A[pX - 1] = pZ
        size[pX] = size[pX] + size[pZ]
    else:
        A[pZ - 1] = pX
        size[pZ] = size[pX] + size[pZ]