Pagini recente » Cod sursa (job #3360212) | Cod sursa (job #3360213) | Cod sursa (job #3360456) | Monitorul de evaluare | Cod sursa (job #3360222)
#include <fstream>
#include <climits>
#include <vector>
using namespace std;
ifstream cin("asmax.in");
ofstream cout("asmax.out");
const int NMAX=16006;
int n,summax[NMAX];
void dfs(vector<vector<int>>&graph,vector<int>&v,int node,int parent)
{
summax[node]=v[node];
for(int son:graph[node])
{
if(son!=parent){
dfs(graph,v,son,node);
if(summax[son]>0) summax[node]+=summax[son];
}
}
}
int main()
{
int n,ct;
cin>> n; vector<vector<int>> graph(n+1,vector<int>());
vector<int> v(n+1);
for(int i=1;i<=n;i++) cin>>v[i];
for(int i=1;i<=n-1;i++) {
int x,y; cin>>x>>y;
graph[x].push_back(y);
graph[y].push_back(x);
} dfs(graph,v,1,0);
int maxi=INT_MIN;
for(int i=1;i<=n;i++) maxi=max(maxi,summax[i]);
cout<<maxi;
return 0;
}