Pagini recente » Cod sursa (job #190528) | Cod sursa (job #2632265) | Cod sursa (job #1548260) | Cod sursa (job #56369) | Cod sursa (job #2236988)
#include <fstream>
#include <vector>
#define NMAX 16002
#define INF 2000000000
using namespace std;
ifstream fin( "asmax.in" );
ofstream fout( "asmax.out" );
int N;
int val[ NMAX ];
vector < int > Ad[ NMAX ];
int parent[ NMAX ];
int best[ NMAX ];
void Read()
{
fin >> N;
for( int i = 1; i <= N; ++i )
fin >> val[ i ];
int a, b;
for( int i = 1; i < N; ++i )
{
fin >> a >> b;
Ad[ a ].push_back( b );
parent[ b ] = a;
}
fin.close();
}
void BEST( int nod )
{
best[ nod ] = val[ nod ];
if( Ad[ nod ].size() > 0 )
{
int sum = 0;
for( int i = 0; i < Ad[nod].size(); ++i )
{
BEST( Ad[nod][i] );
sum = best[ Ad[nod][i] ];
if( sum > 0 ) best[ nod ] += sum;
}
}
}
void Do()
{
for( int i = 1; i <= N; ++i )
best[i] = -INF;
for( int i = 1; i <= N; ++i )
if( best[i] == -INF ) BEST( i );
}
void Print()
{
// for( int i = 1; i <= N; ++i )
// fout << val[i] << ' ' << best[i] << '\n';
int valmax = -INF;
for( int i = 1; i <= N; ++i )
valmax = max( valmax, best[i] );
fout << valmax << '\n';
fout.close();
}
int main()
{
Read();
Do();
Print();
return 0;
}