Pagini recente » Cod sursa (job #1297818) | Cod sursa (job #1722889) | Cod sursa (job #1179018) | Cod sursa (job #458024) | Cod sursa (job #355498)
Cod sursa(job #355498)
#include<stdio.h>
#include<string.h>
#define Nmx 16001
int n,s[Nmx],max,fol[Nmx];
struct nod
{
int inf;
nod *urm;
};
nod *G[Nmx];
void add(int x,int y)
{
nod *aux;
aux=new nod;
aux->urm=G[x];
aux->inf=y;
G[x]=aux;
}
void citire()
{
int x,y;
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d",&s[i]);
for(int i=1;i<n;++i)
{
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
}
}
int solve(int x)
{
int sum=s[x],v=0;
for(nod *p=G[x];p!=NULL;p=p->urm)
if(!fol[p->inf])
{ fol[p->inf]=1;
v=solve(p->inf);
if(v>0)
sum+=v;
if(v>max) max=v;
if(sum>max) max=sum;
}
return sum;
}
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
citire();
max=s[1];
fol[1]=1;
int sum=solve(1);
printf("%d\n",max);
return 0;
}