DeepSeek LeetCode 2050.并行课程 III public int minimumTime(int n, int[][] relations, int[] time)
javaimport java.util.*;class Solution {public int minimumTime(int n, int[][] relations, int[] time) {// 构建图和入度数组ListInteger[] graph new List[n 1];for (int i 1; i n; i) {graph[i] new ArrayList();}int[] indegree new int[n 1];for (int[] rel : relations) {int prev rel[0];int next rel[1];graph[prev].add(next);indegree[next];}// dp[i] 表示完成课程 i 的最早时间int[] dp new int[n 1];QueueInteger queue new LinkedList();// 初始化所有入度为 0 的课程for (int i 1; i n; i) {if (indegree[i] 0) {dp[i] time[i - 1];queue.offer(i);}}// 拓扑排序同时更新 dpwhile (!queue.isEmpty()) {int cur queue.poll();for (int next : graph[cur]) {// 当前课程 cur 完成后next 可以在 cur 完成后立即开始// 所以 dp[next] 需要取所有前驱课程完成时间的最大值dp[next] Math.max(dp[next], dp[cur] time[next - 1]);indegree[next]--;if (indegree[next] 0) {queue.offer(next);}}}// 最终答案是所有课程完成时间的最大值int ans 0;for (int i 1; i n; i) {ans Math.max(ans, dp[i]);}return ans;}}