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