Advertisement
YEZAELP

o55_mwisot

Jan 13th, 2022
1,036
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.67 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. const int N = 1e5 + 10;
  5. vector <int> g[N];
  6. int dp[N][2];
  7. int w[N];
  8.  
  9. int dfs(int u, int p){
  10.     dp[u][1] = w[u];
  11.     for(auto v: g[u]){
  12.         if(v == p) continue;
  13.         dfs(v, u);
  14.         dp[u][0] += max(dp[v][0], dp[v][1]);
  15.         dp[u][1] += dp[v][0];
  16.     }
  17. }
  18.  
  19. int main(){
  20.  
  21.     int n;
  22.     scanf("%d", &n);
  23.  
  24.     for(int i=1;i<=n;i++)
  25.         scanf("%d", &w[i]);
  26.  
  27.     for(int i=1;i<=n-1;i++){
  28.         int u, v;
  29.         scanf("%d %d", &u, &v);
  30.         u ++, v ++;
  31.         g[u].push_back(v);
  32.         g[v].push_back(u);
  33.     }
  34.  
  35.     dfs(1, 1);
  36.  
  37.     printf("%d", max(dp[1][0], dp[1][1]));
  38.  
  39.     return 0;
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement