Pagini recente » Cod sursa (job #593528) | Cod sursa (job #2849588) | Cod sursa (job #1705851) | Cod sursa (job #3155192) | Cod sursa (job #1486953)
#include <fstream>
#include <vector>
using namespace std;
const int NMAX= 16000, inf= (1<<30);
ifstream in( "asmax.in" );
ofstream out( "asmax.out" );
vector <int> g[NMAX+1];
int d[NMAX+1], v[NMAX+1];
int viz[NMAX+1];
void dfs( int nod )
{
viz[nod]= 1;
d[nod]= v[nod];
for( int i= 0; i<(int)g[nod].size(); ++i )
{
if( viz[ g[nod][i] ]==0 )
{
dfs( g[nod][i] );
if( d[ g[nod][i] ]>0 )
{
d[nod]+= d[ g[nod][i] ];
}
}
}
}
int main( )
{
int N, ans= -inf;
in >> N;
for( int i= 1; i<=N; ++i )
{
in >> v[i];
}
for( int i= 1; i<N; ++i )
{
int x, y;
in >> x >> y;
g[x].push_back(y);
g[y].push_back(x);
}
dfs(1);
for( int i= 1; i<=N; ++i )
{
if ( d[i]>ans )
{
ans= d[i];
}
}
out << ans << '\n';
return 0;
}