Pagini recente » Cod sursa (job #179131) | Cod sursa (job #1324038) | Cod sursa (job #249815) | Cod sursa (job #2158186) | Cod sursa (job #50447)
Cod sursa(job #50447)
#include<stdio.h>
#include<stdlib.h>
#define Nm 16001
#define Inf Nm*1000
int V[Nm],X[Nm],Y[Nm],n;
int *G[Nm],D[Nm],Asm[Nm],asmax;
void read()
{
int i,x,y;
freopen("asmax.in","r",stdin);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",V+i);
for(i=1;i<n;i++)
scanf("%d%d",X+i,Y+i);
}
void DFS(int x, int tx)
{
int i;
Asm[x]=V[x];
for(i=0;i<D[x];i++)
if(G[x][i]!=tx)
{
DFS(G[x][i],x);
if(Asm[G[x][i]]>0)
Asm[x]+=Asm[G[x][i]];
}
if(Asm[x]>asmax)
asmax=Asm[x];
}
void solve()
{
int i;
for(i=1;i<n;i++)
{
D[X[i]]++;
D[Y[i]]++;
}
for(i=1;i<=n;i++)
{
G[i]=(int*)malloc(D[i]*sizeof(int));
D[i]=0;
}
for(i=1;i<n;i++)
{
G[X[i]][D[X[i]]++]=Y[i];
G[Y[i]][D[Y[i]]++]=X[i];
}
asmax=-Inf;
DFS(1,0);
}
void write()
{
freopen("asmax.out","w",stdout);
printf("%d\n",asmax);
}
int main()
{
read();
solve();
write();
return 0;
}