Pagini recente » Cod sursa (job #2255674) | Cod sursa (job #2773731) | Cod sursa (job #138991) | Cod sursa (job #2160445) | Cod sursa (job #1477699)
#include<fstream>
#include<vector>
using namespace std;
ifstream fin( "asmax.in" );
ofstream fout( "asmax.out" );
const int nmax = 16000;
const int inf = 1 << 30;
int ans;
int v[ nmax + 1 ], tata[ nmax + 1 ];
vector< int > g[ nmax + 1 ];
int dfs( int nod ) {
if ( g[ nod ].size() == 0 ) {
return v[ nod ];
}
int sum = 0;
for( vector< int >::iterator it = g[ nod ].begin(); it != g[ nod ].end(); ++ it ) {
if ( (*it) != tata[ nod ] ) {
tata[ *it ] = nod;
int shp = dfs( *it );
if ( shp > 0 ) {
sum += shp;
}
}
}
sum += v[ nod ];
if ( sum > ans ) {
ans = sum;
}
return sum;
}
int main() {
int n;
fin >> n;
for( int i = 1; i <= n; ++ i ) {
fin >> v[ i ];
}
for( int i = 1; i < n; ++ i ) {
int x, y;
fin >> x >> y;
g[ x ].push_back( y );
g[ y ].push_back( x );
}
ans = -inf;
dfs( 1 );
fout << ans << "\n";
fin.close();
fout.close();
return 0;
}