Pagini recente » Cod sursa (job #46547) | Cod sursa (job #2396388) | Cod sursa (job #2252235) | Cod sursa (job #1771415) | Cod sursa (job #645232)
Cod sursa(job #645232)
#include <cstdio>
#include <vector>
using namespace std;
#define MAXN 16010
#define LOW -(1<<30)
int N, maxs, V[MAXN], D[MAXN];
vector<int> G[MAXN];
void dfs(int n, int prev){
D[n]=V[n];
for(vector<int>::iterator ii=G[n].begin(); ii!=G[n].end(); ii++)
if(*ii != prev){
dfs(*ii, n);
if(D[*ii] > 0)
D[n]+=D[*ii];
}
if(D[n] > maxs)
maxs=D[n];
}
int main(){
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
int i, a, b;
scanf("%d", &N);
for(i=1; i<=N; i++)
scanf("%d", V+i);
for(i=1; i<N; i++){
scanf("%d%d", &a, &b);
G[a].push_back(b);
G[b].push_back(a);
}
maxs=LOW;
dfs(1, 0);
printf("%d\n", maxs);
return 0;
}