547. Number of Provinces
Description
There are n
cities. Some of them are connected, while some are not. If city a
is connected directly with city b
, and city b
is connected directly with city c
, then city a
is connected indirectly with city c
.
A province is a group of directly or indirectly connected cities and no other cities outside of the group.
You are given an n x n
matrix isConnected
where isConnected[i][j] = 1
if the ith
city and the jth
city are directly connected, and isConnected[i][j] = 0
otherwise.
Return the total number of provinces.
Example 1:
Input: isConnected = [[1,1,0],[1,1,0],[0,0,1]] Output: 2
Example 2:
Input: isConnected = [[1,0,0],[0,1,0],[0,0,1]] Output: 3
Constraints:
1 <= n <= 200
n == isConnected.length
n == isConnected[i].length
isConnected[i][j]
is1
or0
.isConnected[i][i] == 1
isConnected[i][j] == isConnected[j][i]
Solution
number-of-provinces.py
class DSU:
def __init__(self, n):
self.graph = list(range(n))
def find(self, x):
if self.graph[x] != x:
self.graph[x] = self.find(self.graph[x])
return self.graph[x]
def union(self, x, y):
ux, uy = self.find(x), self.find(y)
self.graph[ux] = uy
def connected(self, x, y):
return self.find(x) == self.find(y)
class Solution:
def findCircleNum(self, G: List[List[int]]) -> int:
n = len(G)
uf = DSU(n)
for node in range(n):
for nei in range(n):
if node == nei or G[node][nei] == 0: continue
uf.union(node, nei)
parents = set()
for node in range(n):
p = uf.find(node)
parents.add(p)
return len(parents)