Back to course home
0% completed
Vote For New Content
Another way to go about. This solution does path compression and ranking
Mohammed Dh Abbas
Aug 1, 2024
class UnionFind: def __init__(self): self.parents = {} self.rank = {} def find(self, u): parent = self.parents.get(u, u) if parent == u: self.parents[u] = u return self.parents[u] self.parents[u] = self.find(parent) return self.parents[u] def union(self, u, v): par_u = self.find(u) par_v = self.find(v) if par_u == par_v: return if self.rank.get(par_u, 0) < self.rank.get(par_v, 0): self.parents[par_u] = par_v elif self.rank.get(par_v, 0) < self.rank.get(par_u, 0): self.parents[par_v] = par_u else: self.rank[par_u] = self.rank.get(par_u, 0) + 1 self.parents[par_u] = par_v class Solution: def findProvinces(self, isConnected): uf = UnionFind() for i in range(len(isConnected)): for j in range(len(isConnected[i])): if isConnected[i][j] == 1: uf.union(i, j) result = set() for parant in uf.parents: result.add(uf.find(parant)) return len(result)
0
0
Comments
Comments
On this page