Pagini recente » Cod sursa (job #3003337) | Cod sursa (job #252315) | Cod sursa (job #1517497) | Cod sursa (job #2161089) | Cod sursa (job #215288)
Cod sursa(job #215288)
#include <stdio.h>
#include <vector>
using namespace std;
#define MAX_N 16010
int n,i,j,k,p,q,maxim = -2147000000;
int cost[MAX_N],fol[MAX_N];
vector <int> nod[MAX_N];
int dfs(int p) {
int i = 0, k = nod[p].size(), x, sum = 0;
fol[p] = 1;
for (i = 0; i < k; i++) {
x = 0;
if (!fol[nod[p][i]]) x = dfs(nod[p][i]);
if (x > 0) sum += x;
}
if (cost[p] + sum > maxim) maxim = cost[p] + sum;
return cost[p] + sum;
}
int main() {
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%d",&n);
for (i = 1; i <= n; i++) {
scanf("%d",&cost[i]);
if (cost[i] > maxim) maxim = cost[i];
}
for (i = 1; i <= n - 1; i++) {
scanf("%d %d",&p,&q);
nod[p].push_back(q);
nod[q].push_back(p);
}
k = dfs(1);
printf("%d\n",maxim);
return 0;
}