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. int maxi = 0;
  18. for (auto child : g[node]){
  19. if(child != parent[node]){
  20. maxi = max(maxi, val[child]);
  21. }
  22. }
  23.  
  24.  
  25. totalSum[node] = sum + maxi;
  26. }
  27.  
  28. int main() {
  29.  
  30. int n,e;
  31. cin >> n >> e;
  32.  
  33. vector<vector<int>> g(n+5);
  34.  
  35. for (int i = 0; i < e; i++){
  36. int a, b;
  37. cin >> a >> b;
  38. g[a].push_back(b);
  39. g[b].push_back(a);
  40. }
  41.  
  42. int source;
  43. cin >> source;
  44.  
  45. for (int i = 1; i <= n; i++){
  46. cin >> val[i];
  47. }
  48.  
  49. vector<int> visited(n+5, 0);
  50. vector<int> parent(n+5, 0);
  51.  
  52. DFS(source, g, visited, parent);
  53.  
  54. // for (int i = 1; i <= n; i++){
  55. // cout << totalSum[i] << " ";
  56. // }
  57. // cout << endl;
  58. int ans = INT_MIN;
  59.  
  60. for (int i = 1; i <= n; i++){
  61. ans = max(ans, totalSum[i]);
  62. }
  63.  
  64. cout << "Max-sum downwards path :" << ans;
  65. return 0;
  66. }
Success #stdin #stdout 0.01s 5288KB
stdin
5 4
1 2
1 5
2 3
3 4
1
5 7 -10 4 15
stdout
Max-sum downwards path :20