Naive 하게 DFS로 모든 경우의 수를 조사하면 만나는 시간을 구하는 데만 O( V*(V+E) )이다. 이는, 시작 지점에서 도시 u로 가는 시간을 새로 갱신하면, u와 인접한 도시들도 다시 갱신해 주어야 하기 때문에 발생하는 문제이다. 이러한 방법 대신, 도시 u로 가는 시간을 한 번에 다 구한 뒤에, 이후에 u와 인접한 도시들을 갱신해 주는 것이 효율적일 것이다.
Topological Order 순으로 각 도시와 인접한 도시들의 도착시간을 구한다. 이후, 이를 역추적하여, 도로의 수를 센다. 구체적인 순서는 다음과 같다.
Topological Sort(DFS)
stack을 pop하며, 해당 도시(u)에서 갈 수 있는 인접 도시들(v)의 도착시간을 갱신해 준다.
시간 복잡도는, 도착시간 구하는 데 Topological Sort에 O(n+m), Topological order로 다시 인접 도시를 갱신하는데 O(n+m)이 걸리고, 역추적 하는데 O(n)이 걸린다.