Cod sursa(job #367396)
#include <cstdio>
#include <vector>
#define DIM 16005
#define INF -0x3f3f3f3f
using namespace std;
vector <int> G[DIM];
int a[DIM], i, n, x, y, visited[DIM], Rez[DIM];
int maxim = INF;
void read ()
{
scanf ("%d\n",&n);
for (i = 1; i <= n; i++ ) scanf ("%d",&a[i]);
for (i = 1; i < n ; i++ )
{
scanf ("%d%d\n",&x,&y);
G[x].push_back(y);
G[y].push_back(x);
}
}
int dfs ( int x )
{
visited [x] = 1;
Rez [x] = a[x];
for (i = 0; i < G[x].size(); i++)
{
if ( ! visited [ G[x][i] ] ) {
dfs ( G[x][i] );
if ( Rez [ G[x][i] ] > 0 ) Rez [x] += Rez[ G[x][i] ];
}
}
return 0;
}
void solve () {
for (i = 1; i <= n; i++) if ( maxim < Rez[i] ) maxim = Rez[i];
printf ("%d\n", maxim);
}
int main()
{
freopen ("asmax.in","r",stdin);
freopen ("asmax.out","w",stdout);
read();
dfs(1);
solve();
return 0;
}