Pagini recente » Cod sursa (job #2141087) | Cod sursa (job #1575446) | Cod sursa (job #2816478) | Cod sursa (job #2302879) | Cod sursa (job #365527)
Cod sursa(job #365527)
#include<cstdio>
#include<vector>
#define MAXN 16005
int i , j , k , value[MAXN] , best[MAXN] , a, b , n , maxs = -10000000;
using namespace std;
vector < int > sons[MAXN];
bool been[MAXN] ;
void DF ( int node )
{
int i ;
been[node] = true;
best[node] = value[node];
for( i = 0 ; i < sons[node].size() ; ++i ) {
if ( been[sons[node][i]] == false ) {
DF ( sons[node][i] ) ;
if ( best[sons[node][i]] > 0 )
best[node] += best[sons[node][i]];
}
}
}
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%d",&n);
for( i = 1 ; i <= n; ++i )
scanf("%d",&value[i]);
for( i = 1 ; i <= n - 1 ; ++i ) {
scanf("%d %d",&a,&b);
sons[a].push_back(b);
sons[b].push_back(a);
}
DF(1);
for ( i = 1 ; i <= n ; ++i )
if ( best[i] > maxs ) maxs = best[i];
printf("%d\n",maxs);
return 0;
}