File tree Expand file tree Collapse file tree 1 file changed +51
-0
lines changed Expand file tree Collapse file tree 1 file changed +51
-0
lines changed Original file line number Diff line number Diff line change
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
+ } ;
You can’t perform that action at this time.
0 commit comments