class Solution: def checkIfPrerequisite(self, n: int, prerequisites: List[List[int]], queries: List[List[int]]) -> List[bool]: # Floyd 求传递闭包 reachable = [[False] * n for _ in range(n)] for a, b in prerequisites: reachable[a][b] = True for k in range(n): for i in range(n): for j in range(n): if reachable[i][k] and reachable[k][j]: reachable[i][j] = True return [reachable[u][v] for u, v in queries]
from collections import dequeclass Solution: def checkIfPrerequisite(self, n: int, prerequisites: List[List[int]], queries: List[List[int]]) -> List[bool]: graph = [[] for _ in range(n)] for a, b in prerequisites: graph[a].append(b) # 预处理每个点能到达的所有点 reachable = [[False] * n for _ in range(n)] def bfs(start): q = deque([start]) visited = [False] * n visited[start] = True while q: u = q.popleft() for v in graph[u]: if not visited[v]: visited[v] = True reachable[start][v] = True q.append(v) for i in range(n): bfs(i) return [reachable[u][v] for u, v in queries]