leetcode-188周赛-5406-收集树上苹果最少的时间

题目描述:

 

 

 

 

 

 方法一:dfs 从父节点到子节点

class Solution:
    def minTime(self, n: int, edges: List[List[int]], hasApple: List[bool]) -> int:
        maps = collections.defaultdict(list)
        for e in edges:
            maps[e[0]].append(e[1])
        def dfs(root):
            ret = 0
            for child in maps[root]:
                tmp = dfs(child) 
                ret += tmp
                ##当tmp不等于0时,说明子节点存在苹果则需要加上到达父节点的时间
                if hasApple[child] or tmp != 0:
                    ret += 2
            return ret
        return dfs(0)

方法二:子节点到父节点

class Solution:
    def minTime(self, n: int, edges: List[List[int]], hasApple: List[bool]) -> int:
        tmp = dict()
        for e in edges:
            tmp[e[1]] = e[0]
        paths = set()
        for i in range(len(hasApple)):
            if hasApple[i]:
                p = i
                while (p != 0):#依次回溯到根节点
                    paths.add((tmp[p],p))
                    p = tmp[p]
        return len(paths)*2

 

posted @ 2020-05-10 21:07  oldby  阅读(164)  评论(0编辑  收藏  举报