Course Schedule IV

IF
AlgoAxiomStaff Engineers
JSTS
Medium20 mins

There are a total of numCourses courses you have to take, labeled from 0 to numCourses - 1. You are given an array prerequisites where prerequisites[i] = [ai, bi] indicates that course ai must be taken before course bi.

Prerequisites can be indirect. If course a is a prerequisite of course b, and course b is a prerequisite of course c, then course a is a prerequisite of course c.

You are also given an array queries where queries[j] = [uj, vj]. For each query, answer whether course uj is a prerequisite of course vj (either directly or indirectly).

Return a boolean array answer where answer[j] is the answer to the j-th query.

Examples

Example 1:

Input: numCourses = 2, prerequisites = [[1,0]], queries = [[0,1],[1,0]]

Output: [false,true]

Explanation: Course 1 is a prerequisite of course 0. Course 0 is not a prerequisite of course 1.

Example 2:

Input: numCourses = 2, prerequisites = [], queries = [[1,0],[0,1]]

Output: [false,false]

Explanation: There are no prerequisites, so no course is a prerequisite of any other.

Example 3:

Input: numCourses = 3, prerequisites = [[1,2],[1,0],[2,0]], queries = [[1,0],[1,2]]

Output: [true,true]

Explanation: Course 1 is a direct prerequisite of both course 0 and course 2. So the answer to both queries is true.

Constraints

  • 2 <= numCourses <= 100
  • 0 <= prerequisites.length <= (numCourses * (numCourses - 1)) / 2
  • prerequisites[i].length == 2
  • 0 <= ai, bi <= numCourses - 1
  • ai !== bi
  • All pairs [ai, bi] are unique
  • The prerequisites graph has no cycles
  • 1 <= queries.length <= 10000
  • 0 <= uj, vj <= numCourses - 1
  • uj !== vj
Source: Topological Sort pattern — AlgoAxiom
JavaScript
Test Case 1
root = [1, 2, 3]
Test Case 2
root = [1, 2, 3, 4, 5]
Idle