1. Quick-Find (Flat Component ID Array)
Intuition
Store component representative directly in an array. find(u) is O(1), but union(u, v) scans all N elements in O(N).
Algorithm
- Initialize id array where id[i] = i for all i.
- find(u): Return id[u] in O(1).
- unionSets(u, v):
- pid = id[u], qid = id[v].
- If pid == qid, return false.
- For every element i from 0 to N - 1: if id[i] == pid, update id[i] = qid.
- Return true.
#include <iostream>#include <vector> using namespace std; class QuickFind { vector<int> id;public: QuickFind(int n) : id(n) { for (int i = 0; i < n; ++i) id[i] = i; } int find(int u) { return id[u]; } bool unionSets(int u, int v) { int pid = id[u]; int qid = id[v]; if (pid == qid) return false; for (int i = 0; i < id.size(); ++i) { if (id[i] == pid) id[i] = qid; } return true; }}; int main() { QuickFind dsu(5); dsu.unionSets(0, 1); dsu.unionSets(1, 2); cout << "Connected 0 and 2: " << (dsu.find(0) == dsu.find(2) ? "true" : "false") << endl; cout << "Connected 0 and 3: " << (dsu.find(0) == dsu.find(3) ? "true" : "false") << endl; return 0;}Time & Space Complexity
- Time complexity:
Find: O(1), Union: O(N) - Space complexity:
O(N)