Pagini recente » Cod sursa (job #1045982) | Cod sursa (job #2320466) | Cod sursa (job #1237132) | Cod sursa (job #1383983) | Cod sursa (job #1780125)
#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 ( i = 0 ; i < g[nod].size() ; ++ i )
if ( g[nod][i] != tata )
dfs ( g[nod][i], nod );
for ( i = 0 ; i < g[nod].size() ; ++ i )
if ( g[nod][i] != tata )
d[nod] = max ( d[nod], d[nod] + v[g[nod][i]] );
}
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;
}