leetcode-27双周赛-5410-课程表Ⅳ

题目描述:

 

 

 

 

 

 

 

 提交:超时

class Solution:
    def checkIfPrerequisite(self, n: int, prerequisites: List[List[int]], queries: List[List[int]]) -> List[bool]:
        dic = collections.defaultdict(set)
        for i,j in prerequisites:
            dic[i].add(j)
        ans = []
        
        def helper(i,j):
            if j in dic[i]:
                return True
            elif len(dic[i]) == 0:
                return False
            for x in dic[i]:
                if helper(x, j):
                    return True
            return False
                
        for i,j in queries:
            if helper(i,j):
                ans.append(True)
            else:
                ans.append(False)
                
        return ans

方法一:动态规划:O(N3)

class Solution:
    def checkIfPrerequisite(self, n, prerequisites, queries):
        admat = []
        for i in range(n):
            admat.append([False]*n)

        for u, v in prerequisites:
            admat[u][v] = True

        for k in range(n):
            for i in range(n):
                for j in range(n):
                    admat[i][j] = admat[i][j] or (admat[i][k] and admat[k][j])

        return [admat[u][v] for u,v in queries]

方法二:搜索

class Solution:
    def checkIfPrerequisite(self, n: int, prerequisites: List[List[int]], queries: List[List[int]]) -> List[bool]:
        graph = [[] for _ in range(n)]
        for u, v in prerequisites:
            # need u to do v
            graph[u].append(v)
        
        ans = []
        for qs, qt in queries:
            stack = [qs]
            seen = {qs}
            while stack:
                node = stack.pop()
                if node == qt:
                    ans.append(True)
                    break
                for nei in graph[node]:
                    if nei not in seen:
                        stack.append(nei)
                        seen.add(nei)
            else:
                ans.append(False)
        return ans
            

 

posted @ 2020-06-01 09:23  oldby  阅读(175)  评论(0编辑  收藏  举报