Pagini recente » Cod sursa (job #2862327) | Cod sursa (job #2945224) | Cod sursa (job #11950) | Cod sursa (job #2315926) | Cod sursa (job #1607678)
#include <cstdio>
#include <vector>
#include <climits>
#define NMAX 16000
#define pb push_back
using namespace std;
int n,Ans=INT_MIN;
int v[NMAX],viz[NMAX];
vector<int> g[NMAX];
void read()
{
int i,a,b;
scanf("%d",&n);
for(i=1;i<=n;++i)
scanf("%d",&v[i]);
for(i=2;i<=n;++i)
{
scanf("%d%d",&a,&b);
g[a].pb(b);
g[b].pb(a);
}
}
int dfs(int k)
{
int sumanod,suma=0;
viz[k]=1;
vector<int>::iterator it;
for(it=g[k].begin();it!=g[k].end();++it)
if(!viz[*it])
{
sumanod=dfs(*it);
if(sumanod>0)
suma+=sumanod;
}
if(suma+v[k]>Ans)
Ans=suma+v[k];
if(suma+v[k]>0)
return suma+v[k];
return 0;
}
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
read();
dfs(1);
printf("%d\n",Ans);
return 0;
}