Pagini recente » Cod sursa (job #939488) | Cod sursa (job #2088250) | Cod sursa (job #2941769) | Cod sursa (job #2949350) | Cod sursa (job #1780128)
#include <cstdio>
#include <vector>
#include <algorithm>
const int NMAX = 16000;
using namespace std;
vector <int> g[NMAX+5];
int v[NMAX+5], d[NMAX+5];
void dfs( int nod, int tata ) {
int i;
for ( auto it : g[nod] )
if ( it != tata )
dfs ( it, nod );
for ( auto it : g[nod] )
if ( it != tata )
d[nod] = max ( d[nod], d[nod] + d[it] );
}
int main() {
freopen ( "asmax.in", "r", stdin );
freopen ( "asmax.out", "w", stdout );
int n, m, i, a, b, my_max;
scanf ( "%d", &n );
for ( i = 1 ; i <= n ; ++ i ) {
scanf ( "%d", &v[i] );
d[i] = v[i];
}
for ( i = 1 ; i < n ; ++ i ) {
scanf ( "%d%d", &a, &b );
g[a].push_back ( b );
g[b].push_back ( a );
}
my_max = -2000000000;
dfs ( 1, 0 );
for ( i = 1 ; i <= n ; ++ i )
if ( d[i] > my_max )
my_max = d[i];
printf ( "%d\n", my_max );
return 0;
}