Leetcode # 323. Number of Connected Components in an Undirected Graph
- 2022.12.09
- Disjoint Set Union LeetCode
https://leetcode.com/problems/number-of-connected-components-in-an-undirected-graph
Solution: Disjoint Set Union (DSU)
Time Complexity: O()
Space Complexity: O()
(The input and output generally do not count towards the space complexity.)
class Dsu: def __init__(self, roots = None): self.root = {} self.rank = {} if roots: for r in roots: self.make_set(r) def make_set(self, x): self.root[x] = x self.rank[x] = 0 def find(self, x): if self.root[x] == x: return x self.root[x] = self.find(self.root[x]) return self.root[x] def union(self, x, y): x_root = self.find(x) y_root = self.find(y) if x_root != y_root: if self.rank[x_root] < self.rank[y_root]: large = y_root small = x_root else: large = x_root small = y_root self.root[small] = large if self.rank[large] == self.rank[small]: self.rank[large] += 1 def get_ds(self): disjoint_sets = collections.defaultdict(set) for key in self.root: disjoint_sets[self.find(key)].add(key) return disjoint_sets class Solution: def countComponents(self, n: int, edges: List[List[int]]) -> int: dsu = Dsu([i for i in range(n)]) for edge in edges: dsu.union(*edge) dsu.get_ds() print(dsu.get_ds()) return len(dsu.get_ds())
Last Updated on 2023/08/16 by A1go