1. 解题思路
这一题思路上来说还是很直接的,就是用一个深度优先遍历即可,标记一下每一条路径之前有没有保留过节点,然后找出最大方案即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def maximumScoreAfterOperations(self, edges: List[List[int]], values: List[int]) -> int:
graph = defaultdict(list)
for u, v in edges:
graph[u].append(v)
graph[v].append(u)
@lru_cache(None)
def dfs(u, p, have_point):
if have_point:
ans = values[u]
for v in graph[u]:
if v == p:
continue
ans += dfs(v, u, True)
return ans
else:
if len(graph[u]) == 1 and p != -1:
return 0
ans1, ans2 = 0, values[u]
for v in graph[u]:
if v == p:
continue
ans1 += dfs(v, u, True)
ans2 += dfs(v, u, False)
return max(ans1, ans2)
return dfs(0, -1, False)
提交代码评测得到:耗时1316ms,占用内存57.8MB。