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. if(max_sum[curr]==INT_MIN){
  16. max_sum[curr]=val[curr];
  17. }
  18. else{
  19. max_sum[curr]+=val[curr];
  20. }
  21.  
  22.  
  23.  
  24.  
  25. }
  26. int main() {
  27. int n ; int m ;
  28. cin>>n>>m;
  29. vector<vector<int>>adjlist(n+1);
  30. vector<bool>vis(n+1,false);
  31. vector<int>val(n+1,0);
  32. vector<int>max_sum(n+1,INT_MIN);
  33.  
  34. for(int i = 0 ; i<m;i++){
  35. int u ; int v ;
  36. cin>>u>>v;
  37. adjlist[u].push_back(v);
  38. adjlist[v].push_back(u);
  39. }
  40. for(int i = 1 ; i<=n ; i++) cin>>val[i];;
  41. dfs(vis,adjlist,1,max_sum,val);
  42. cout<<max_sum[1];
  43. return 0;
  44. }
Success #stdin #stdout 0.01s 5320KB
stdin
11 10 
1 2 
2 4  
2 5 
1 3 
3 6 
3 7
6 8 
6 9 
7 10 
7 11

-3 4 -2 3 1 7 0 5 8 9 6
stdout
10