Pagini recente » Cod sursa (job #2873365) | Cod sursa (job #585208) | Cod sursa (job #2163972) | Cod sursa (job #506237) | Cod sursa (job #182704)
Cod sursa(job #182704)
#include <stdio.h>
using namespace std;
#define max(a,b) (a>b?a:b)
#define dim 16001
struct nod
{
int inf;
nod *next;
};
nod *l[dim];
int v[dim], s[dim], n, m;
void add(int x, int y)
{
nod *p=new nod;
p->inf=x;
p->next=l[y];
l[y]=p;
}
void df(int);
int main()
{
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
long i, x, y;
nod *p;
scanf("%d", &n);
for(i=1; i<=n; i++)
scanf("%d", &v[i]);
for(i=1; i<n; i++)
{
scanf("%ld%ld", &x, &y);
add(x, y);
add(y, x);
}
/*for(i=1; i<=n; i++)
{
p=l[i];
while(p)
{
printf("%d ", p->inf);
p=p->next;
}
printf("\n");
}
printf("\n");*/
df(1);
m=v[1];/*
for(i=1; i<=n; i++)
printf("%d ", v[i]);
printf("\n");*/
for(i=2; i<=n; i++)
m=max(m, v[i]);
printf("%d", m);
return 0;
}
void df(int i)
{
nod *p=l[i];
int ind;
s[i]=1;
while(p)
{
ind=p->inf;
if(!s[ind])
{
df(ind);
if(v[ind]>0)
v[i]+=v[ind];
}
p=p->next;
}
}