|
|
| Line 1: |
Line 1: |
| − | Step 1:
| |
| | | | |
| − | Perform topological sorting of the graph (we can do it as Graph is acyclic). This is O(n + m)
| |
| − |
| |
| − | Step 2:
| |
| − |
| |
| − | Go through vertices in topological order. Initially all vertices marked as inaccessible and only starting vertex marked with 0 distance.
| |
| − | For every vertex in cycle, if it is accessible, we update all its children with new distance if new distance is shorter then previous one.
| |
| − | Topological sorting ensures that we don't ever need to go backtrack. This is O(n + m).
| |
| − |
| |
| − | Total running bound is O(n+m), which is linear as requested.
| |