Bird
Raised Fist0
DSA C++programming~5 mins

Union Find Disjoint Set Data Structure in DSA C++ - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the main purpose of the Union Find Disjoint Set data structure?
It helps to keep track of elements divided into disjoint sets and supports two main operations: finding which set an element belongs to, and uniting two sets into one.
Click to reveal answer
beginner
Explain the 'find' operation in Union Find Disjoint Set.
The 'find' operation returns the representative or leader of the set that an element belongs to. It helps to check if two elements are in the same set.
Click to reveal answer
beginner
What does the 'union' operation do in the Union Find Disjoint Set?
The 'union' operation merges two different sets into one by connecting their leaders, so that elements from both sets become part of the same set.
Click to reveal answer
intermediate
Why is path compression important in Union Find?
Path compression speeds up the 'find' operation by making nodes on the path point directly to the set leader, reducing the tree height and making future finds faster.
Click to reveal answer
intermediate
What is union by rank or size and why is it used?
Union by rank or size attaches the smaller tree under the root of the larger tree during union to keep the tree shallow, improving the efficiency of find operations.
Click to reveal answer
What does the 'find' operation return in a Union Find Disjoint Set?
AThe size of the set
BThe union of two sets
CThe total number of sets
DThe leader or representative of the set
What is the main goal of path compression in Union Find?
ATo speed up future find operations by flattening the tree
BTo count the number of elements in a set
CTo increase the height of the tree
DTo merge two sets
Which operation combines two sets into one in Union Find?
AFind
BSplit
CUnion
DCompress
Why do we use union by rank or size?
ATo increase the number of sets
BTo keep the tree balanced and shallow
CTo find the leader faster
DTo delete elements from sets
If two elements have the same leader after 'find', what does it mean?
AThey belong to the same set
BThey belong to different sets
CThey are not connected
DThey are leaders themselves
Describe how the Union Find Disjoint Set data structure works and its main operations.
Think about how to check if two elements are connected and how to merge their groups.
You got /4 concepts.
    Explain the importance of path compression and union by rank/size in optimizing Union Find.
    Consider how these techniques affect the speed of find and union operations.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the primary purpose of the Union Find Disjoint Set data structure?
      easy
      A. To efficiently track and merge groups of connected elements
      B. To sort elements in ascending order
      C. To store key-value pairs for fast lookup
      D. To implement a queue with priority

      Solution

      1. Step 1: Understand the role of Union Find

        The Union Find data structure is designed to keep track of which elements belong to which groups or sets, especially when these groups can merge.
      2. Step 2: Compare with other data structures

        Sorting elements, storing key-value pairs, or implementing priority queues are different tasks handled by other data structures.
      3. Final Answer:

        To efficiently track and merge groups of connected elements -> Option A
      4. Quick Check:

        Union Find = Track and merge groups [OK]
      Hint: Union Find = track connected groups fast [OK]
      Common Mistakes:
      • Confusing Union Find with sorting algorithms
      • Thinking it stores key-value pairs like a map
      • Assuming it manages priority like a heap
      2. Which of the following is the correct way to declare a parent array for Union Find of size n in C++?
      easy
      A. int parent[n+1]; for(int i=1; i<=n; i++) parent[i] = i;
      B. int parent[n]; for(int i=0; i
      C. int parent[n]; for(int i=0; i<=n; i++) parent[i] = i;
      D. int parent[n]; for(int i=1; i

      Solution

      1. Step 1: Initialize parent array correctly

        The parent array should have size n, and each element should initially be its own parent, so indices 0 to n-1 must be set.
      2. Step 2: Check loop boundaries

        Loop must run from 0 to n-1 (i < n) to avoid out-of-bounds errors.
      3. Final Answer:

        int parent[n]; for(int i=0; i -> Option B
      4. Quick Check:

        Initialize parents from 0 to n-1 [OK]
      Hint: Initialize parents from 0 to n-1 [OK]
      Common Mistakes:
      • Using <= n causing out-of-bounds error
      • Starting loop from 1 when array is 0-indexed
      • Declaring array size incorrectly
      3. Consider the following C++ code using Union Find:
      int parent[5];
      for(int i=0; i<5; i++) parent[i] = i;
      
      // Union function
      void unionSet(int a, int b) {
        int rootA = findSet(a);
        int rootB = findSet(b);
        if(rootA != rootB) parent[rootB] = rootA;
      }
      
      // Find function
      int findSet(int x) {
        if(parent[x] == x) return x;
        return parent[x] = findSet(parent[x]);
      }
      
      unionSet(0, 1);
      unionSet(1, 2);
      unionSet(3, 4);
      
      cout << (findSet(2) == findSet(0)) << " " << (findSet(4) == findSet(0));
      
      What is the output?
      medium
      A. 0 0
      B. 0 1
      C. 1 1
      D. 1 0

      Solution

      1. Step 1: Perform unions and find roots

        unionSet(0,1) merges sets of 0 and 1; unionSet(1,2) merges sets of 1 and 2, so 0,1,2 are connected. unionSet(3,4) connects 3 and 4.
      2. Step 2: Check if 2 and 0 share the same root, and if 4 and 0 share the same root

        findSet(2) == findSet(0) is true (1), findSet(4) == findSet(0) is false (0).
      3. Final Answer:

        1 0 -> Option D
      4. Quick Check:

        Connected(2,0) = 1, Connected(4,0) = 0 [OK]
      Hint: Check connected sets after unions [OK]
      Common Mistakes:
      • Assuming 4 is connected to 0
      • Forgetting path compression in findSet
      • Mixing up union order
      4. The following code snippet for Union Find has a bug. What is the error?
      int parent[5];
      for(int i=0; i<5; i++) parent[i] = i;
      
      int findSet(int x) {
        if(parent[x] == x) return x;
        return findSet(parent[x]);
      }
      
      void unionSet(int a, int b) {
        int rootA = findSet(a);
        int rootB = findSet(b);
        if(rootA != rootB) parent[rootB] = rootA;
      }
      
      unionSet(0, 1);
      unionSet(1, 2);
      cout << (findSet(2) == findSet(0));
      
      medium
      A. Incorrect initialization of parent array
      B. Union function does not check if roots are equal
      C. Missing path compression in findSet function
      D. Array size is too small for elements

      Solution

      1. Step 1: Analyze findSet function

        The findSet function recursively finds the root but does not update parent[x] to root, missing path compression optimization.
      2. Step 2: Understand impact of missing path compression

        Without path compression, findSet is slower on deep trees but still correct. Other options are incorrect because initialization and union checks are correct, and array size matches elements.
      3. Final Answer:

        Missing path compression in findSet function -> Option C
      4. Quick Check:

        findSet lacks path compression [OK]
      Hint: Check if findSet updates parent for path compression [OK]
      Common Mistakes:
      • Thinking union lacks root equality check
      • Assuming parent array is wrongly initialized
      • Confusing array size with element count
      5. You have 6 elements (0 to 5) initially in separate sets. After these operations:
      unionSet(0, 1);
      unionSet(2, 3);
      unionSet(4, 5);
      unionSet(1, 2);
      unionSet(0, 4);
      
      How many distinct sets remain?
      hard
      A. 1
      B. 2
      C. 3
      D. 4

      Solution

      1. Step 1: Track unions step-by-step

        Initially: {0}, {1}, {2}, {3}, {4}, {5} unionSet(0,1) -> {0,1}, {2}, {3}, {4}, {5} unionSet(2,3) -> {0,1}, {2,3}, {4}, {5} unionSet(4,5) -> {0,1}, {2,3}, {4,5} unionSet(1,2) merges {0,1} and {2,3} -> {0,1,2,3}, {4,5} unionSet(0,4) merges {0,1,2,3} and {4,5} -> {0,1,2,3,4,5}
      2. Step 2: Count remaining distinct sets

        All elements are connected in one set after last union.
      3. Final Answer:

        1 -> Option A
      4. Quick Check:

        All merged into one set [OK]
      Hint: Count merges to find final distinct sets [OK]
      Common Mistakes:
      • Counting sets before all unions
      • Not merging transitive connections
      • Assuming unions only connect pairs
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard