Skip to content

Commit 62375ef

Browse files
authored
Create 2925-maximum-score-after-applying-operations-on-a-tree.js
1 parent f4c7ba2 commit 62375ef

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/**
2+
* @param {number[][]} edges
3+
* @param {number[]} values
4+
* @return {number}
5+
*/
6+
var maximumScoreAfterOperations = function(edges, values) {
7+
const n = values.length;
8+
const g = new Array(n).fill(null).map(() => []);
9+
for (const edge of edges) {
10+
const [u, v] = edge;
11+
g[u].push(v);
12+
g[v].push(u);
13+
}
14+
15+
const subtree = new Array(n);
16+
for (let i = 0; i < n; i++) {
17+
subtree[i] = values[i];
18+
}
19+
20+
const pre = (node, parent) => {
21+
for (const child of g[node]) {
22+
if (child !== parent) {
23+
pre(child, node);
24+
subtree[node] += subtree[child];
25+
}
26+
}
27+
};
28+
29+
pre(0, -1);
30+
31+
const dp = new Array(n).fill(-1);
32+
33+
const dfs = (node, parent) => {
34+
dp[node] = subtree[node] - values[node];
35+
let sum = 0;
36+
let cnt = 0;
37+
for (const child of g[node]) {
38+
if (child !== parent) {
39+
dfs(child, node);
40+
cnt++;
41+
sum += dp[child];
42+
}
43+
}
44+
if (cnt > 0) {
45+
dp[node] = Math.max(dp[node], values[node] + sum);
46+
}
47+
};
48+
49+
dfs(0, -1);
50+
return dp[0];
51+
};

0 commit comments

Comments
 (0)