Skip to content

Commit cdd20ee

Browse files
solves Count Unreachable Pairs of Nodes in an Undirected Graph (#2316) in python (#12)
1 parent 2da60f3 commit cdd20ee

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# https://leetcode.com/problems/count-unreachable-pairs-of-nodes-in-an-undirected-graph/description/
2+
# T: O(N + E) where N is the number of nodes and E is the number of edges
3+
# S: O(N + E) where N is the number of nodes and E is the number of edges
4+
5+
from collections import defaultdict
6+
class Solution:
7+
def __init__(self):
8+
self.graph = defaultdict(list)
9+
self.visited = set()
10+
self.n = 0
11+
12+
def add_edge(self, u, v):
13+
self.graph[u].append(v)
14+
self.graph[v].append(u)
15+
16+
def dfs(self, v, component):
17+
self.visited.add(v)
18+
component.append(v)
19+
for neighbor in self.graph[v]:
20+
if neighbor not in self.visited:
21+
self.dfs(neighbor, component)
22+
23+
def find_components(self):
24+
components = []
25+
for v in range(self.n):
26+
if v not in self.visited:
27+
component = []
28+
self.dfs(v, component)
29+
components.append(component)
30+
31+
return components
32+
33+
def countPairs(self, n, edges):
34+
for u, v in edges:
35+
self.add_edge(u, v)
36+
self.n = n
37+
component_lengths = []
38+
components = self.find_components()
39+
for component in components:
40+
component_lengths.append(len(component))
41+
print(components, component_lengths)
42+
43+
k = sum(component_lengths)
44+
sol = 0
45+
for l in component_lengths:
46+
sol+=((k-l)*l)
47+
sol = sol//2
48+
49+
return sol

0 commit comments

Comments
 (0)