← Graph Exploration

Micro-Drill #227 — Union-Find with path compression + rank

Graph Exploration Target: 15s

Path compression: point directly to root. Union by rank: attach smaller tree under larger. Near O(1) amortized.

class UnionFind:
    def __init__(self, n):
        self.parent = list(range(n))
        self.rank = [0] * n

    def find(self, x):
        if self.parent[x] != x:
            self.parent[x] = self.find(self.parent[x])  # path compression
        return self.parent[x]

    def union(self, x, y):
        px, py = self.find(x), self.find(y)
        if px == py: return False
        if self.rank[px] < self.rank[py]:
            px, py = py, px
        self.parent[py] = px
        if self.rank[px] == self.rank[py]:
            self.rank[px] += 1
        return True

Type it from memory. Go.

Practice Problems

Related Coding Drills

← Micro #226 Micro #228 →