1
+ from typing import List
2
+
3
+
1
4
def dfs (u ):
2
- global g , r , scc , component , visit , stack
5
+ global graph , reversedGraph , scc , component , visit , stack
3
6
if visit [u ]:
4
7
return
5
8
visit [u ] = True
6
- for v in g [u ]:
9
+ for v in graph [u ]:
7
10
dfs (v )
8
11
stack .append (u )
9
12
10
13
11
14
def dfs2 (u ):
12
- global g , r , scc , component , visit , stack
15
+ global graph , reversedGraph , scc , component , visit , stack
13
16
if visit [u ]:
14
17
return
15
18
visit [u ] = True
16
19
component .append (u )
17
- for v in r [u ]:
20
+ for v in reversedGraph [u ]:
18
21
dfs2 (v )
19
22
20
23
21
24
def kosaraju ():
22
- global g , r , scc , component , visit , stack
25
+ global graph , reversedGraph , scc , component , visit , stack
23
26
for i in range (n ):
24
27
dfs (i )
25
28
visit = [False ] * n
@@ -36,16 +39,16 @@ def kosaraju():
36
39
# n - no of nodes, m - no of edges
37
40
n , m = list (map (int , input ().strip ().split ()))
38
41
39
- g = [[] for i in range (n )] # graph
40
- r = [[] for i in range (n )] # reversed graph
42
+ graph : List [ List [ int ]] = [[] for i in range (n )] # graph
43
+ reversedGraph : List [ List [ int ]] = [[] for i in range (n )] # reversed graph
41
44
# input graph data (edges)
42
45
for i in range (m ):
43
46
u , v = list (map (int , input ().strip ().split ()))
44
- g [u ].append (v )
45
- r [v ].append (u )
47
+ graph [u ].append (v )
48
+ reversedGraph [v ].append (u )
46
49
47
- stack = []
48
- visit = [False ] * n
49
- scc = []
50
- component = []
50
+ stack : List [ int ] = []
51
+ visit : List [ bool ] = [False ] * n
52
+ scc : List [ int ] = []
53
+ component : List [ int ] = []
51
54
print (kosaraju ())
0 commit comments