Imagine you're planning your college course schedule! ๐ŸŽ“ You have numCourses courses numbered from 0 to numCourses - 1, and some courses have prerequisites that must be completed first.

You're given an array prerequisites where prerequisites[i] = [ai, bi] means you must complete course ai before taking course bi. For example, [0, 1] means course 0 is required before course 1.

Here's the tricky part: Prerequisites can be indirect! If course A is required for course B, and course B is required for course C, then course A is also required for course C (transitivity).

You need to answer multiple queries where each query [u, v] asks: "Is course u a prerequisite of course v?"

Goal: Return a boolean array where each element answers the corresponding query efficiently.

Input & Output

example_1.py โ€” Basic Prerequisites
$ Input: numCourses = 2, prerequisites = [[1,0]], queries = [[0,1],[1,0]]
โ€บ Output: [false, true]
๐Ÿ’ก Note: Course 1 is a prerequisite of course 0, but course 0 is not a prerequisite of course 1. So [0,1] returns false and [1,0] returns true.
example_2.py โ€” Transitive Prerequisites
$ Input: numCourses = 3, prerequisites = [[1,2],[1,0],[2,0]], queries = [[1,0],[1,2]]
โ€บ Output: [true, true]
๐Ÿ’ก Note: Course 1 is directly a prerequisite of both courses 0 and 2. The transitive relationship 1โ†’2โ†’0 also makes 1 a prerequisite of 0.
example_3.py โ€” No Prerequisites
$ Input: numCourses = 3, prerequisites = [], queries = [[0,1],[1,2],[2,0]]
โ€บ Output: [false, false, false]
๐Ÿ’ก Note: No prerequisites are given, so no course is a prerequisite of any other course. All queries return false.

Constraints

  • 2 โ‰ค numCourses โ‰ค 100
  • 0 โ‰ค prerequisites.length โ‰ค (numCourses * (numCourses - 1) / 2)
  • prerequisites[i].length == 2
  • 0 โ‰ค ai, bi โ‰ค numCourses - 1
  • ai โ‰  bi
  • All the pairs [ai, bi] are unique
  • The prerequisites graph has no cycles
  • 1 โ‰ค queries.length โ‰ค 104
  • 0 โ‰ค uj, vj โ‰ค numCourses - 1
  • uj โ‰  vj

Visualization

Tap to expand
Course Schedule Prerequisite GraphMathPhysEngCSAILegend:Direct prerequisiteTransitive prerequisiteQuery Examples:โ€ข Is Math prerequisite of AI? โ†’ Trueโ€ข Is Physics prerequisite of CS? โ†’ False
Understanding the Visualization
1
Model as Graph
Each course is a node, prerequisites are directed edges
2
Find Transitive Closure
Use Floyd-Warshall to find all indirect prerequisite relationships
3
Answer Queries
Look up precomputed relationships in constant time
Key Takeaway
๐ŸŽฏ Key Insight: By precomputing all transitive relationships using Floyd-Warshall, we transform multiple expensive graph traversals into simple matrix lookups, achieving optimal performance for multiple queries.
Asked in
Google 42 Amazon 38 Meta 29 Microsoft 25
28.4K Views
Medium Frequency
~18 min Avg. Time
985 Likes
Ln 1, Col 1
Smart Actions
๐Ÿ’ก Explanation
AI Ready
๐Ÿ’ก Suggestion Tab to accept Esc to dismiss
// Output will appear here after running code
Code Editor Closed
Click the red button to reopen