fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. vector<int> totalSum(1e5+7);
  4. vector<int> val(1e5+7);
  5.  
  6. void DFS(int node, vector<vector<int>>& g, vector<int>& visited, vector<int>& parent){
  7.  
  8. visited[node] = 1;
  9. int sum = val[node];
  10. for (auto &i : g[node]){
  11. if(visited[i] == 0){
  12. parent[i] = node;
  13. DFS(i, g, visited, parent);
  14. }
  15. }
  16.  
  17. for (auto child : g[node]){
  18. if(child != parent[node]){
  19. sum += totalSum[child];
  20. }
  21. }
  22.  
  23. totalSum[node] = sum;
  24. }
  25.  
  26. int main() {
  27.  
  28. int n,e;
  29. cin >> n >> e;
  30.  
  31. vector<vector<int>> g(n+5);
  32.  
  33. for (int i = 0; i < e; i++){
  34. int a, b;
  35. cin >> a >> b;
  36. g[a].push_back(b);
  37. g[b].push_back(a);
  38. }
  39.  
  40. int source;
  41. cin >> source;
  42.  
  43. for (int i = 1; i <= n; i++){
  44. cin >> val[i];
  45. }
  46.  
  47. vector<int> visited(n+5, 0);
  48. vector<int> parent(n+5, 0);
  49.  
  50. DFS(source, g, visited, parent);
  51.  
  52. for (int i = 1; i <= n; i++){
  53. cout << totalSum[i] << " ";
  54. }
  55. int ans = INT_MIN;
  56. cout << endl;
  57.  
  58. for (int i = 1; i <= n; i++){
  59. ans = max(ans, totalSum[i]);
  60. }
  61.  
  62. cout << "Max-sum of Subtree :" << ans;
  63. return 0;
  64. }
Success #stdin #stdout 0.01s 5248KB
stdin
5 4
1 2
1 5
2 3
3 4
1
5 7 -10 4 15
stdout
21 1 -6 4 15 
Max-sum of Subtree :21