Pagini recente » Cod sursa (job #920728) | Cod sursa (job #2339258) | Cod sursa (job #763526) | Cod sursa (job #2596837) | Cod sursa (job #1092273)
#include<cstdio>
#include<vector>
using namespace std;
#define MAX 16001
#define pb push_back
int N , s_max = -1001 , best[MAX] , v[MAX] , p[MAX];
vector<int> G[MAX];
void read();
void dfs(int x);
void write();
int main()
{
read();
dfs(1);
write();
return 0;
}
void read()
{
int x , y;
freopen("asmax.in" , "r" ,stdin );
scanf("%d" , &N );
for(int i = 1 ; i <= N ; ++i )
scanf("%d" , &v[i] );
for(int i = 1 ; i < N ; ++i )
{
scanf("%d%d" , &x , &y );
G[x].pb(y);
G[y].pb(x);
}
}
void dfs(int x)
{
best[x] = v[x];
for(int i = 0 ; i < (int)G[x].size() ; ++i )
{
if(G[x][i] == p[x])continue;
p[G[x][i]] = x;
dfs(G[x][i]);
if(best[G[x][i]] > 0)
best[x]+=best[G[x][i]];
}
if(best[x] > s_max )s_max = best[x];
}
void write()
{
freopen("asmax.out" , "w" ,stdout );
printf("%d" , s_max);
}