Article start
DSA Course: Interview Patterns and Problem Solving
Module 7: Graphs

Union Find Components: Disjoint Set Pattern

Merge connected nodes and count how many groups remain.

May 29, 2026·26

Learning Outcome

After this lesson, you should be able to use parent and size arrays to merge graph components efficiently.

Problem Statement

Given n nodes and undirected edges, return the number of connected components using Union Find.

InputOutputWhy
n = 5, edges = [[0,1],[1,2],[3,4]]2Unioning the edges creates groups {0,1,2} and {3,4}.

Brute Force Approach

After every edge, run DFS again to recompute groups. This repeats traversal work after each merge.

Optimized Approach

Initialize each node as its own parent. Union endpoints of every edge and decrement the component count only when two different roots merge.

Exact Pseudocode

parent[i] = i
size[i] = 1
components = n
for edge (a, b):
  if union(a, b) merges two roots:
    components -= 1
return components

find(x):
  compress parent pointers until root is found

Reference Code

class Solution:
    def countComponents(self, n, edges):
        parent = list(range(n))
        size = [1] * n

        def find(x):
            while x != parent[x]:
                parent[x] = parent[parent[x]]
                x = parent[x]
            return x

        def union(a, b):
            ra, rb = find(a), find(b)
            if ra == rb:
                return False
            if size[ra] < size[rb]:
                ra, rb = rb, ra
            parent[rb] = ra
            size[ra] += size[rb]
            return True

        components = n
        for a, b in edges:
            if union(a, b):
                components -= 1
        return components

Sample Dry Run

StepStateResult
StartEvery node is its own parentcomponents = 5
Union 0 and 1Different roots mergecomponents = 4
Union 1 and 22 joins root of 0,1components = 3
Union 3 and 4Different roots mergecomponents = 2

Complexity

MeasureValueReason
TimeO((n + e) alpha(n))Path compression and union by size make each operation almost constant.
SpaceO(n)Parent and size arrays store one entry per node.

Edge Cases

  • Repeated edges should not reduce the count twice.
  • Self-loops should not reduce the count.
  • With no edges, every node is a component.

Interview Checklist

  • Only decrement count when roots differ.
  • Compress paths in find.
  • Attach smaller set under larger set.

FAQs

What does alpha(n) mean?

It is the inverse Ackermann factor, which is effectively constant for interview-sized inputs.

When is Union Find better than DFS?

It is especially useful when connectivity is built through many merge operations.

What is the core pattern?

Disjoint set union.

Test your knowledge

Take a quick quiz based on this chapter.

Discussion

0 comments

Sign in to share a question or add to the discussion.
Start the discussion

Ask a question or share what stood out to you.