rajeshinternshala

Untitled

Jan 13th, 2024
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.98 KB | None | 0 0
  1. long maxBeauty(int tree_nodes, vector<int> tree_from, vector<int> tree_to, vector<int> a) {
  2.     vector<vector<int>> g(tree_nodes+1);
  3.     for(int i=0;i<tree_nodes-1;++i) {
  4.         int x = tree_from[i], y = tree_to[i];
  5.         g[x].push_back(y), g[y].push_back(x);
  6.     }
  7.     vector<long> sum(tree_nodes+1), dp(tree_nodes+1);
  8.     function<void(int,int)> dfs = [&](int s,int p) {
  9.         sum[s] = a[s-1];
  10.         for(auto &j:g[s]) {
  11.             if(j == p) {
  12.                 continue;
  13.             }
  14.             dfs(j, s);
  15.             sum[s] += sum[j];
  16.             dp[s] += dp[j];
  17.             dp[s] += sum[j];
  18.         }
  19.     };
  20.     dfs(1, 0);
  21.     long ans = 0;
  22.     function<void(int,int)> dfs2 = [&](int s,int p) {
  23.         ans = max(ans, dp[s]);
  24.         for(auto &j:g[s]) {
  25.             if(j == p) {
  26.                 continue;
  27.             }
  28.             dp[j] += dp[s] - (dp[j] + sum[j]) + sum[1] - sum[j];
  29.             dfs2(j, s);
  30.         }
  31.     };
  32.     dfs2(1, 0);
  33.     return ans;
  34. }
Add Comment
Please, Sign In to add comment