Pagini recente » Cod sursa (job #73281) | Cod sursa (job #1390184) | Cod sursa (job #931657) | Cod sursa (job #1799529) | Cod sursa (job #1388269)
#include <fstream>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
const int NMAX = 16000;
const int INF = ( 1 << 29 );
typedef long long I64;
vector <int> G[NMAX+3];
I64 d[NMAX+3], v[NMAX+3];
int N, Ans = 0;
bool viz[NMAX+3];
void DFS( int nod ) {
viz[nod] = 1;
d[nod] = v[nod];
for( int i = 0; i < (int)G[nod].size(); ++i ) {
int x = G[nod][i];
if( !viz[x] ) {
DFS( x );
d[nod] += max( 0LL, d[x] );
}
}
}
int main() {
in >> N;
for( int i = 1; i <= N; ++i ) {
in >> v[i];
d[i] = -INF;
}
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);
Ans = *max_element( d+1, d+N+1 );
out << Ans << '\n';
return 0;
}