fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define ll long long
  5. ll cost[1000000];
  6.  
  7. void dfs(int node,vector<int>t[],vector<int>&v,vector<int>&parent,vector<int>&b){
  8. v[node]=1;
  9. for(auto it:t[node]){
  10. if(v[it]==0){
  11. parent[it]=node;
  12. dfs(it,t,v,parent,b);
  13. }
  14. }
  15. ll c=0;
  16. for(auto child:t[node]){
  17. if(child!=parent[node])c+=cost[child];
  18. }
  19. cost[node]=c+b[node];
  20. }
  21.  
  22. int main(){
  23. ios_base::sync_with_stdio(false);
  24. cin.tie(NULL);
  25. int n;
  26. cin>>n;
  27. vector<int>t[n+1];
  28. vector<int>v(n+1),parent(n+1),b(n+1);
  29. for(int i=1;i<=n;i++)cin>>b[i];
  30. for(int i=1;i<n;i++){
  31. int x,y;
  32. cin>>x>>y;
  33. t[x].push_back(y);
  34. t[y].push_back(x);
  35. }
  36. dfs(1,t,v,parent,b);
  37. ll ans=0;
  38. for(int i=1;i<=n;i++){
  39. ans=max(ans,cost[i]);
  40. }
  41. cout<<"Max subtree sum is "<<ans<<"\n";
  42. return 0;
  43. }
Success #stdin #stdout 0.01s 5288KB
stdin
5
5 7 -10 4 15 
1 2
2 3 
3 4 
1 5
stdout
Max subtree sum is 21