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
Visualization
Time & Space Complexity
O(V³) for Floyd-Warshall preprocessing plus O(1) per query
2D matrix to store all pairwise reachability relationships
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