fork download
  1. #include <iostream>
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4.  
  5.  
  6. void dfs(vector<bool>&vis,vector<vector<int>>&adjlist,int curr,vector<int>&max_sum,vector<int>&val){
  7. vis[curr]=true;
  8.  
  9. for(int adj : adjlist[curr]){
  10. if(!vis[adj]){
  11. dfs(vis,adjlist,adj,max_sum,val);
  12. max_sum[curr]=max(max_sum[adj],max_sum[curr]);
  13. }
  14. }
  15. max_sum[curr]=max(max_sum[curr],0);
  16. if(max_sum[curr]==INT_MIN){
  17. max_sum[curr]=val[curr];
  18. }
  19. else{
  20. max_sum[curr]+=val[curr];
  21. }
  22. }
  23. int main() {
  24. int n ; int m ;
  25. cin>>n>>m;
  26. vector<vector<int>>adjlist(n+1);
  27. vector<bool>vis(n+1,false);
  28. vector<int>val(n+1,0);
  29. vector<int>max_sum(n+1,INT_MIN);
  30.  
  31. for(int i = 0 ; i<m;i++){
  32. int u ; int v ;
  33. cin>>u>>v;
  34. adjlist[u].push_back(v);
  35. adjlist[v].push_back(u);
  36. }
  37. for(int i = 1 ; i<=n ; i++) cin>>val[i];;
  38. dfs(vis,adjlist,1,max_sum,val);
  39. cout<<*max_element(max_sum.begin(),max_sum.end());
  40. return 0;
  41. }
Success #stdin #stdout 0.01s 5288KB
stdin
3 2 
1 2 
2 3

2 3 -1
stdout
5