

Solution BFS

class Solution {
public int minimumSemesters(int n, int[][] relations) {
int[] inDegree = new int[n + 1];
Map<Integer, List<Integer>> graph = new HashMap<>();
for (int i = 1; i <= n; i++) {
graph.put(i, new ArrayList<>());
}
for (int[] r : relations) {
inDegree[r[1]]++;
graph.get(r[0]).add(r[1]);
}
Queue<Integer> queue = new LinkedList<>();
for (int i = 1; i <= n; i++) {
if (inDegree[i] == 0) {
queue.offer(i);
}
}
int count = 0;
int res = 0;
while (!queue.isEmpty()) {
int size = queue.size();
for (int i = 0; i < size; i++) {
int curCourse = queue.poll();
count++;
for (int adj : graph.get(curCourse)) {
inDegree[adj]--;
if (inDegree[adj] == 0) {
queue.offer(adj);
}
}
}
res++;
}
return count == n ? res : -1;
}
}