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