Teaching Kids Programming: Videos on Data Structures and Algorithms
You are given n cities represented as an integer in [0, n) and a list of one-way roads that connects one city to another.
Return whether you can reach any city from any city.
Constraints
n ≤ 10,000
m ≤ 100,000 where m is the length of roadsExample 1
Inputn = 2 roads = [ [0, 1], [1, 0] ]Output
True
Explanation
You can go 0 to 1 and 1 to 0Example 2
Inputn = 2 roads = [ [1, 0] ]Output
False
Explanation
You can go 1 to 0 but not 0 to 1Hints:
Reverse the direction of every edge in the graph. How does this help?
There should be only 1 strongly connected component
Kosaraju’s Algorithm
Recursive Depth First Search Graph Algorithm to Determine a Strongly Connected Component
A SCC (Strongly Connected Component) means that any vertices in a Directed Graph can be reachable from any vertices. It is easier to check for a Undirected Graph – we just have to check if the Undirected graph is connected as one piece.
To proof any vertex can go to any vertex, we can check the following two:
1. Vertex 1 (for simplicity) can go to any other vertex – this can be done via a single Depth First Search.
2. Any vertex can go to vertex 1 – this can be done via a Single Depth First Search Algorithm on the reversed Graph (with reverse edges).
class Solution:
def solve(self, n, roads):
def f(cur, G):
seen = set()
def dfs(cur):
if cur in seen:
return
seen.add(cur)
for i in G[cur]:
dfs(i)
dfs(cur)
return len(seen) == n
G1 = defaultdict(list)
for a, b in roads:
G1[a].append(b)
G2 = defaultdict(list)
for a, b in roads:
G2[b].append(a)
return f(0, G1) and f(0, G2)
We are performing the DFS twice – and thus the time complexity is O(V+E) and the space complexity is also O(V+E) where V and E are the number of the vertex and edges respectively.
–EOF (The Ultimate Computing & Technology Blog) —
Last Post: Teaching Kids Programming - Longest Substring Without Repeating Characters - Another Version of Two Pointer / Sliding Window Algorithm
Next Post: How to Send/Transfer USDT/USDD/USDC Tokens on Tron Blockchain using Tronweb (Javascript)?