Pagini recente » Cod sursa (job #361776) | Cod sursa (job #2034678) | Cod sursa (job #74967) | Cod sursa (job #179939) | Cod sursa (job #2023487)
#include <bits/stdc++.h>
#define nmax 16001
using namespace std;
ifstream fin ("asmax.in");
ofstream fout ("asmax.out");
vector<int>G[nmax];
int n,V[nmax],v[nmax],D[nmax],maxi=INT_MIN;
void dfs(int nod){
int s=0;
v[nod]=1;
for(vector<int>::iterator it=G[nod].begin();it!=G[nod].end();++it)
if(!v[*it]){
dfs(*it);
s+=(D[*it]>=0?D[*it]:0);
}
D[nod]=max(V[nod],V[nod]+s);
}
int main()
{
int a,b;
fin>>n;
for(int i=1;i<=n;++i)fin>>V[i];
for(int i=1;i<n;++i){
fin>>a>>b;
G[a].push_back(b);
G[b].push_back(a);
}
memset(v,0,sizeof(v));
dfs(1);
for(int i=1;i<=n;++i)
maxi=max(maxi,D[i]);
fout<<maxi<<endl;
return 0;
}