Parallel Courses

Minimum number of semesters to complete n courses with dependencies, unlimited parallelism — BFS over semester levels.

Medium
Time O(V + E) Space O(V + E)
LeetCode
4 min read
topological-sort bfs

Problem#

n courses 1..n with dependency pairs [a, b] meaning a before b. Each semester you can take any subset whose prereqs are done. Return minimum semesters, or -1 if cyclic.

Examples#

  • n=3, relations=[[1,3],[2,3]]2
  • n=3, relations=[[1,2],[2,3],[3,1]]-1

Approach#

Layered BFS (Kahn’s by depth). Each round, dequeue every current zero-indegree node, decrement their neighbors, enqueue new zeros. Increment semester counter per round.

Solution#

Parallel Courses
class Solution {
public:
int minimumSemesters(int n, vector<vector<int>>& relations) {
vector<vector<int>> adj(n + 1);
vector<int> indeg(n + 1, 0);
for (auto& r : relations) {
adj[r[0]].push_back(r[1]);
++indeg[r[1]];
}
queue<int> q;
for (int i = 1; i <= n; ++i) if (indeg[i] == 0) q.push(i);
int sem = 0, taken = 0;
while (!q.empty()) {
int sz = q.size();
++sem;
taken += sz;
for (int i = 0; i < sz; ++i) {
int u = q.front(); q.pop();
for (int v : adj[u]) if (--indeg[v] == 0) q.push(v);
}
}
return taken == n ? sem : -1;
}
};

Editorial#

The “layered” BFS processes one level (semester) at a time. The size of the queue at each iteration’s start is the semester’s batch.

Complexity#

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

Concept revision#

Search ESC

Keyboard shortcuts

Shortcuts are disabled while typing in inputs.