Pagini recente » Cod sursa (job #1377019) | Cod sursa (job #1525914) | Cod sursa (job #2896871) | Cod sursa (job #2155117) | Cod sursa (job #135060)
Cod sursa(job #135060)
#include<stdio.h>
#include<vector>
using namespace std;
#define infinit 0x3f3f3f3f
#define lg 16005
int n, i, rsp[lg], fst[lg], val[lg], nr[lg], mx, x, y, pus[lg];
vector<int> v[lg];
void df(int nod, int str){
int i;
fst[nod] = 1;
for (i = 0; i < nr[nod]; i ++)
if (!fst[v[nod][i]])
df(v[nod][i], nod);
rsp[nod] += val[nod];
if (rsp[nod] > 0)
rsp[str] += rsp[nod];
fprintf(stderr, "pentru nodul %d este %d\n", nod, rsp[nod]);
}
int main()
{
freopen("asmax.in", "rt", stdin);
freopen("asmax.out", "wt", stdout);
scanf("%d", &n);
for (i = 1; i <= n; i ++)
scanf("%d", &val[i]);
for (i = 1; i < n; i ++){
scanf("%d%d", &x, &y);
nr[x] ++;
v[x].push_back(y);
nr[y] ++;
v[y].push_back(x);
}
df(1, 0);
mx = -infinit;
for (i = 1; i <= n; i ++)
if (rsp[i] > mx)
mx = rsp[i];
printf("%d\n", mx);
return 0;
}