2050. Parallel Courses III

Created: 2021/10/25

Leetcodearrow-up-right

You are given an integer n, which indicates that there are n courses labeled from 1 to n. You are also given a 2D integer array relations where relations[j] = [prevCoursej, nextCoursej] denotes that course prevCoursej has to be completed before course nextCoursej (prerequisite relationship). Furthermore, you are given a 0-indexed integer array time where time[i] denotes how many months it takes to complete the (i+1)th course.

You must find the minimum number of months needed to complete all the courses following these rules:

  • You may start taking a course at any time if the prerequisites are met.

  • Any number of courses can be taken at the same time.

Return the minimum number of months needed to complete all the courses.

Note: The test cases are generated such that it is possible to complete every course (i.e., the graph is a directed acyclic graph).

Example 1:

Example 2:

Constraints:

  • 1 <= n <= 5 * 104

  • 0 <= relations.length <= min(n * (n - 1) / 2, 5 * 104)

  • relations[j].length == 2

  • 1 <= prevCoursej, nextCoursej <= n

  • prevCoursej != nextCoursej

  • All the pairs [prevCoursej, nextCoursej] are unique.

  • time.length == n

  • 1 <= time[i] <= 104

  • The given graph is a directed acyclic graph.

Basic Idea

每门课都需要在所有先修课上完之后才能上,而同时可以有任意多的课一起上。整体的逻辑还是一个topological sort,但我们仍然需要想办法追踪每门课最终完成需要的时间,最终返回的就是所有课程完成时间中最长的一个。那么如何追踪每门课完成的时间呢?只要用另一个map来记录每门课的先修课中结束最晚的时间加上该课自己的时间即可。

Java Code:

Last updated