Pagini recente » Cod sursa (job #37851) | Cod sursa (job #2635718) | Cod sursa (job #1783551) | Cod sursa (job #2134402) | Cod sursa (job #355496)
Cod sursa(job #355496)
#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+sum>sum)
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];
int sum=solve(1);
printf("%d\n",max);
return 0;
}