Union-Find (Disjoint Set)

Data Structures

Connectivity, cycle detection, and clustering in undirected networks

83 problems·1 Easy·47 Medium·35 Hard
Pattern Study Guide & Cheat Sheet

Disjoint Set Union (DSU) tracks partitions and connectivity of elements, merging groups and querying whether two elements share a component in near-constant O(α(N)) time.

Core Invariant: Maintain representative parent pointers. With Path Compression (`parent[x] = find(parent[x])`) and Union by Rank, tree depth remains <= 4 for all practical universe scales (inverse Ackermann α(N)).

Recognize it (Keywords & Signals)
  • Connected components in an undirected network
  • Redundant connection / cycle detection in undirected graph
  • Number of provinces / islands / friend circles
  • Graph valid tree (exactly n - 1 edges and 1 connected component)
  • Minimum Spanning Tree (Kruskal's algorithm)
When NOT to use

Directed graphs (DSU cannot handle edge directions; use Topological Sort or Tarjan / Kosaraju).

How to solve (Step-by-step)
  1. 1.Initialize `parent = list(range(n))` and `rank = [1] * n`.
  2. 2.Implement `find(x)`: recursively find root while flattening tree (`parent[x] = find(parent[x])`).
  3. 3.Implement `union(x, y)`: find roots `rx = find(x)`, `ry = find(y)`. If equal, they already connect (cycle detected!).
  4. 4.If unequal, attach smaller rank root under larger rank root, and decrement component count.
  5. 5.Return True if merged, False if already connected.
Watch for (Interview Traps)
  • Comparing raw node IDs instead of representative roots (`x == y` instead of `find(x) == find(y)`)
  • Omitting path compression: operations degenerate to O(N) linear chains without it
  • Using DSU on directed graphs where edge orientation matters
Disjoint Set Union (DSU) with Path Compression & Rank
class UnionFind:
    def __init__(self, size: int):
        self.parent = list(range(size))
        self.rank = [1] * size
        self.components = size

    def find(self, x: int) -> int:
        if self.parent[x] != x:
            # Path compression: flatten path directly to root
            self.parent[x] = self.find(self.parent[x])
        return self.parent[x]

    def union(self, x: int, y: int) -> bool:
        root_x, root_y = self.find(x), self.find(y)
        if root_x == root_y:
            return False  # Already in same set (cycle detected!)
            
        # Union by rank: attach smaller tree under larger tree
        if self.rank[root_x] > self.rank[root_y]:
            self.parent[root_y] = root_x
        elif self.rank[root_x] < self.rank[root_y]:
            self.parent[root_x] = root_y
        else:
            self.parent[root_y] = root_x
            self.rank[root_x] += 1
            
        self.components -= 1
        return True
Cost
O(α(N)) ≈ O(1) amortized per operation · O(N) for parent and rank arrays (Inverse Ackermann α(N) never exceeds 4 for any practical input size.)
Canonical problems
#547 Number of Provinces: Union cities with direct flights; return final component count
#684 Redundant Connection: First edge where union returns False creates the cycle
#261 Graph Valid Tree: Must have exactly n - 1 edges and 1 connected component
#128 Longest Consecutive Sequence: Union adjacent numbers x and x+1
Medium·90 companies·Max freq 100%·Acc 64.7%
HiveAndurilTinkoff+87
Medium·44 companies·Max freq 100%·Acc 47.2%
Wissen TechnologyWissen TechnologyNeetCode 150+41
Medium·25 companies·Max freq 100%·Acc 64.4%
Tower Research CapitalTower Research CapitalUrban Company+22
Medium·22 companies·Max freq 100%·Acc 74.1%
SchlumbergerGrubhubRoku+19
Medium·17 companies·Max freq 83%·Acc 61.6%
GrabDocusignMeta+14
Medium·15 companies·Max freq 87%·Acc 0.5%
PornhubMolocoNeetCode 150+12
Medium·13 companies·Max freq 92%·Acc 62.9%
SnapTikTokSnap+10
Medium·12 companies·Max freq 100%·Acc 71.3%
DirectiNeetCode 150NeetCode 150+9
Medium·12 companies·Max freq 75%·Acc 52.8%
SamsungMeeshoTikTok+9
Medium·11 companies·Max freq 100%·Acc 50.1%
ZenefitsNeetCode 150NeetCode 150+8
Medium·11 companies·Max freq 100%·Acc 66.9%
Akuna CapitalPhonePeIBM+8
Medium·11 companies·Max freq 88%·Acc 59.6%
LimeSamsungLinkedIn+8
Hard·11 companies·Max freq 78%·Acc 68.0%
WeRideNeetCode 150NeetCode 150+8
Medium·11 companies·Max freq 75%·Acc 0.7%
BoxNeetCode 150NeetCode 150+8
Medium·10 companies·Max freq 100%·Acc 65.1%
XGeneral MotorsX+7
Hard·10 companies·Max freq 100%·Acc 43.3%
DropboxNCRBNY Mellon+7
Medium·10 companies·Max freq 100%·Acc 60.8%
PhonePePayPalPalantir+7
Hard·10 companies·Max freq 90%·Acc 40.7%
UberMolocoWaymo+7
Medium·9 companies·Max freq 100%·Acc 70.7%
Two SigmaBloombergAmazon+6
Medium·9 companies·Max freq 67%·Acc 63.6%
WaymoNutanixVisa+6
Medium·8 companies·Max freq 62%·Acc 57.2%
ZomatoIntuitUber+5
Medium·7 companies·Max freq 100%·Acc 0.5%
Sumo LogicSumo LogicCleverTap+4
Medium·7 companies·Max freq 75%·Acc 56.1%
CiscoSalesforceZeta Global+4
Hard·7 companies·Max freq 63%·Acc 0.6%
CitadelSquarepoint CapitalPalo Alto Networks+4
Medium·6 companies·Max freq 100%·Acc 63.4%
NutanixWeRideAmazon+3
Hard·6 companies·Max freq 75%·Acc 68.2%
DE ShawTuringGoogle+3
Medium·6 companies·Max freq 75%·Acc 60.3%
PhonePeAtlassianIBM+3
Hard·6 companies·Max freq 63%·Acc 66.9%
UberAccentureGoogle+3
Medium·6 companies·Max freq 27%·Acc 72.0%
GoogleBloombergMicrosoft+3
Medium·6 companies·Max freq 25%·Acc 73.5%
OracleAmazonMicrosoft+3
Medium·5 companies·Max freq 68%·Acc 81.1%
ClouderaAmazonMeta+2
Medium·5 companies·Max freq 63%·Acc 0.5%
SnapSnapAmazon+2
Hard·5 companies·Max freq 50%·Acc 0.7%
UberDE ShawMeta+2
Hard·5 companies·Max freq 38%·Acc 56.4%
DoorDashAppleGoogle+2
Easy·5 companies·Max freq 38%·Acc 55.5%
BloombergMicrosoftAmazon+2
Medium·5 companies·Max freq 38%·Acc 67.2%
OracleGoogleMicrosoft+2
Medium·5 companies·Max freq 38%·Acc 70.7%
GoogleBloombergMeta+2
Medium·4 companies·Max freq 100%·Acc 0.6%
CruiseCruiseMoveworks+1
Hard·4 companies·Max freq 100%·Acc 45.8%
instabaseTikTokGoogle+1
Hard·4 companies·Max freq 88%·Acc 37.5%
SnapSnapPhonePe+1
Medium·4 companies·Max freq 79%·Acc 0.7%
Sumo LogicSumo LogicGoogle+1
Medium·4 companies·Max freq 63%·Acc 43.7%
SalesforceAppleMicrosoft+1
Medium·4 companies·Max freq 50%·Acc 51.4%
RipplingAppleGoogle+1
Medium·4 companies·Max freq 50%·Acc 54.8%
TikTokGoogleMeta+1
Hard·4 companies·Max freq 41%·Acc 68.7%
AtlassianGoogleMeta+1
Hard·4 companies·Max freq 38%·Acc 66.6%
UberAmazonMeta+1
Hard·4 companies·Max freq 38%·Acc 45.1%
InfosysAmazonMicrosoft+1
Medium·4 companies·Max freq 16%·Acc 80.8%
MicrosoftMetaAmazon+1
Medium·4 companies·Max freq 13%·Acc 70.3%
MetaAmazonMicrosoft+1
Hard·3 companies·Max freq 100%·Acc 24.0%
HuaweiWorldQuantDE Shaw
Medium·3 companies·Max freq 100%·Acc 64.5%
RobinhoodSamsungGoogle
Medium·3 companies·Max freq 91%·Acc 66.1%
ExpediaUberGoogle
Medium·3 companies·Max freq 68%·Acc 54.7%
GeicoGoogleAmazon
Hard·3 companies·Max freq 56%·Acc 42.4%
CitadelGoogleMeta
Medium·3 companies·Max freq 25%·Acc 44.2%
MetaMicrosoftGoogle
Medium·3 companies·Max freq 25%·Acc 50.1%
UberGoogleMeta
Hard·3 companies·Max freq 25%·Acc 56.5%
GoogleAmazonBloomberg
Hard·3 companies·Max freq 25%·Acc 63.4%
UberGoogleMicrosoft
Hard·3 companies·Max freq 13%·Acc 66.2%
AmazonMicrosoftGoogle
Medium·2 companies·Max freq 100%·Acc 60.6%
MakeMyTripGoogle
Hard·2 companies·Max freq 100%·Acc 45.8%
DropboxUber
Hard·2 companies·Max freq 93%·Acc 32.1%
GameskraftGoogle
Medium·2 companies·Max freq 79%·Acc 56.2%
IntuitGoogle
Hard·2 companies·Max freq 75%·Acc 51.6%
Oscar HealthGoogle
Medium·2 companies·Max freq 54%·Acc 45.7%
PhonePeAmazon
Hard·2 companies·Max freq 50%·Acc 44.0%
UberAmazon
Hard·2 companies·Max freq 25%·Acc 55.5%
AmazonGoogle
Hard·2 companies·Max freq 25%·Acc 65.6%
AppleGoogle
Hard·2 companies·Max freq 25%·Acc 43.4%
GoogleMicrosoft
Hard·2 companies·Max freq 25%·Acc 61.0%
UberGoogle
Hard·2 companies·Max freq 13%·Acc 60.3%
AmazonGoogle
Hard·2 companies·Max freq 13%·Acc 25.2%
AmazonGoogle
Hard·1 companies·Max freq 75%·Acc 17.2%
Infosys
Hard·1 companies·Max freq 28%·Acc 49.7%
Uber
Hard·1 companies·Max freq 27%·Acc 50.4%
Amazon
Medium·1 companies·Max freq 25%·Acc 63.6%
Amazon
Medium·1 companies·Max freq 25%·Acc 84.0%
Amazon
Hard·1 companies·Max freq 25%·Acc 36.4%
Google
Medium·1 companies·Max freq 25%·Acc 55.2%
Google
Hard·1 companies·Max freq 25%·Acc 70.1%
Google
Hard·1 companies·Max freq 18%·Acc 64.8%
Google
Medium·1 companies·Max freq 13%·Acc 49.1%
Amazon
Hard·1 companies·Max freq 13%·Acc 63.1%
Google
Showing 83 of 83 problems in Union-Find (Disjoint Set)Filtered: All Companies