fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define int long long int
  4. #define double long double
  5.  
  6.  
  7. const int M = 1000000007;
  8. const int N = 3e5+9;
  9. const int INF = 2e9+1;
  10. const int MAXN = 100000;
  11. const int LINF = 2000000000000000001;
  12.  
  13. //_ ***************************** START Below *******************************
  14.  
  15.  
  16. //* Subtree sum
  17.  
  18. vector<vector<int>> tree;
  19. vector<int> nodes;
  20. vector<int> sum;
  21.  
  22. int dfs(int v, int p){
  23.  
  24. int curr_sum = 0;
  25. for(auto& u : tree[v]){
  26. if(u == p) continue; // ignore parent
  27. // if(visited[u]) continue; // OR ignore via visited
  28.  
  29. curr_sum += dfs(u, v);
  30.  
  31. }
  32. return sum[v] = curr_sum + nodes[v];
  33. }
  34.  
  35. void consistency(int n){
  36.  
  37. sum.resize(n+1, 0);
  38.  
  39. dfs(1, 0);
  40.  
  41. int maxi = 0;
  42. for(int i=1; i<=n; i++) maxi = max(maxi, sum[i]);
  43. cout << maxi << endl;
  44.  
  45. }
  46.  
  47.  
  48.  
  49. void solve() {
  50.  
  51. int n;
  52. cin >> n;
  53.  
  54. tree.resize(n+1); // 1 based indexing
  55. nodes.resize(n+1);
  56. for(int i=1; i<=n; i++) cin >> nodes[i];
  57.  
  58. for(int i=0; i<n-1; i++){
  59. int x, y;
  60. cin >> x >> y;
  61. tree[x].push_back(y);
  62. tree[y].push_back(x);
  63. }
  64.  
  65. consistency(n);
  66.  
  67. }
  68.  
  69.  
  70.  
  71.  
  72.  
  73. int32_t main() {
  74. ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  75.  
  76. int t = 1;
  77. while (t--) {
  78. solve();
  79. }
  80.  
  81. return 0;
  82. }
Success #stdin #stdout 0.01s 5276KB
stdin
6
1 2 2 2 3 3
1 2
1 3
1 4
2 5
3 6
stdout
13