Parallel Courses III

Minimum time to finish all courses given per-course time and prerequisites — topological DP.

Hard
Time O(V + E) Space O(V + E)
LeetCode
5 min read
topological-sort dp

Problem#

n courses with time[i] and dependency pairs. Courses can run in parallel. Each starts only after all prereqs finish. Return minimum time to complete all.

Examples#

  • n=3, deps=[[1,3],[2,3]], time=[3,2,5]8

Constraints#

  • 1 <= n <= 5 * 10^4.

Approach#

Topological DP. done[v] = finish time of course v. While propagating through Kahn’s BFS, set done[v] = max(done[u] + time[v]) over all prereqs u — actually done[v] = max(done[u]) + time[v].

Solution#

Parallel Courses III
class Solution {
public:
int minimumTime(int n, vector<vector<int>>& relations, vector<int>& time) {
vector<vector<int>> adj(n);
vector<int> indeg(n, 0);
for (auto& r : relations) {
adj[r[0] - 1].push_back(r[1] - 1);
++indeg[r[1] - 1];
}
queue<int> q;
vector<int> done(n, 0);
for (int i = 0; i < n; ++i) if (indeg[i] == 0) { q.push(i); done[i] = time[i]; }
while (!q.empty()) {
int u = q.front(); q.pop();
for (int v : adj[u]) {
done[v] = max(done[v], done[u] + time[v]);
if (--indeg[v] == 0) q.push(v);
}
}
return *max_element(done.begin(), done.end());
}
};

Editorial#

Critical-path DP fused with topo sort. done[v] only finalizes when all prereqs have been processed (in-degree hits 0), so the max-over-prereqs update is correct.

Complexity#

  • Time: O(V + E).
  • Space: O(V + E).

Concept revision#

Search ESC

Keyboard shortcuts

Shortcuts are disabled while typing in inputs.