Pagini recente » Cod sursa (job #2033559) | Cod sursa (job #2484377) | Cod sursa (job #137537) | Cod sursa (job #1955217) | Cod sursa (job #1025452)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define MAX_N 16000
int val[MAX_N];
vector< int > v[MAX_N];
bool marked[MAX_N];
int d[MAX_N];
void read( FILE *fin, int &n ) {
fscanf( fin, "%d", &n );
for ( int i = 0; i < n; ++i )
fscanf( fin, "%d", &val[i] );
for ( int i = 0; i < n - 1; ++i ) {
int x, y;
fscanf( fin, "%d%d", &x, &y );
--x, --y;
v[x].push_back( y );
v[y].push_back( x );
}
}
void dfs( int node ) {
marked[node] = true;
for ( vector< int >::iterator it = v[node].begin(); it != v[node].end(); ++it )
if ( !marked[*it] ) {
dfs( *it );
d[node] = max( d[node], d[node] + d[*it] );
}
}
int main() {
FILE *fin, *fout;
fin = fopen( "asmax.in", "r" );
int n;
read( fin, n );
fclose( fin );
for ( int i = 0; i < n; ++i )
d[i] = val[i];
dfs( 0 );
fout = fopen( "asmax.out", "w" );
int ans = d[0];
for ( int i = 1; i < n; ++i )
ans = max( ans, d[i] );
fprintf( fout, "%d\n", ans );
fclose( fout );
}