开始以为是并查集,判断两个点是否联通,但是考虑到是有向图,实际上使用floyd算法判断是否可以从A点到B点,优雅的Python写法
class Solution:
def checkIfPrerequisite(self, n: int, prerequisites: List[List[int]], queries: List[List[int]]) -> List[bool]:
dp = [[False] * n for _ in range(n)]
# every edge
for u, v in prerequisites:
dp[u][v] = True
# dp里面装着dp[i][j][k-1]的结果
for k in range(n):
for i in range(n):
for j in range(n):
dp[i][j] = dp[i][j] or (dp[i][k] and dp[k][j])
return [dp[u][v] for u, v in queries]