defminTime(n:int, edges: List[List[int]], hasApple: List[bool])->int:
data_dict ={}for i inrange(n):
data_dict[i]=[]for one in edges:
data_dict[one[0]].append(one[1])# print(data_dict)defdfs(i):
key = hasApple[i]for index in data_dict[i]:
key |= dfs(index)ifnot key:del data_dict[i]return key
dfs(0)# print(data_dict)returnmax(0,2*(len(data_dict)-1))
classSolution:defminTime(self, n:int, edges: List[List[int]], hasApple: List[bool])->int:
data_dict ={}for one in edges:if one[0]in data_dict:
data_dict[one[0]].append(one[1])else:
data_dict[one[0]]=[one[1]]# dfsdefdfs(i):
cnt =0if i in data_dict:for child in data_dict[i]:
tmp = dfs(child)
cnt += tmp
# 如果此孩子节点为True(苹果)或者 该节点的孩子节点统计的数量不为0(有苹果)if hasApple[child]or tmp:
cnt +=2return cnt
return dfs(0)
方法二:类似于Union-Find方法
层层向上统计父节点,并用 hash set 存储,用来去重。
classSolution:defminTime(self, n:int, edges: List[List[int]], hasApple: List[bool])->int:
data_dict ={}for one in edges:
data_dict[one[1]]= one[0]print(data_dict)
cnt =0
father_node =set()for index, ele inenumerate(hasApple):if ele:while index notin father_node and index in data_dict:
cnt +=2
father_node.add(index)
index = data_dict[index]return cnt
文章目录题目描述思路方法一:DFS方法二:类似于Union-Find方法题目描述思路方法一:DFSdef minTime(n: int, edges: List[List[int]], hasApple: List[bool]) -> int: data_dict = {} for i in range(n): data_dict[i] = [] for one in edges: data_dict[one[0]].append(one[1]) # p