Pagini recente » Cod sursa (job #2018137) | Cod sursa (job #2479987) | Istoria paginii runda/rosedu_cdl_2015 | Cod sursa (job #251043) | Cod sursa (job #129302)
Cod sursa(job #129302)
#include <stdio.h>
typedef struct nod
{
int inf;
nod *adr;
} *pNod;
pNod v[16001];
int viz[16001], n, val[16001], max;
void adauga(int x, int y)
{
pNod q;
q = new nod;
q -> inf = y;
q -> adr = v[x];
v[x] = q;
q = new nod;
q -> inf = x;
q -> adr = v[y];
v[y] = q;
}
void citire()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%d",&n);
int i, x, y;
for (i = 1; i <= n; i++) scanf("%d",&val[i]);
for (i = 1; i < n; i++)
{
scanf("%d %d",&x, &y);
adauga(x,y);
}
}
void df(int nod)
{
while (v[nod])
{
viz[nod] = 1;
if (!viz[v[nod] -> inf])
{
df(v[nod] -> inf);
if (val[v[nod] -> inf] > 0)
val[nod] += val[v[nod] -> inf];
}
v[nod] = v[nod] -> adr;
}
}
int main()
{
citire();
int i;
df(1);
max = - 1000000000;
for (i = 1; i <= n; i++) if (val[i] > max) max = val[i];
printf("%ld\n",max);
return 0;
}