Pagini recente » Cod sursa (job #2498955) | Cod sursa (job #3257573) | Cod sursa (job #1986503) | Cod sursa (job #2390445) | Cod sursa (job #1001169)
#include<cstdio>
#include<cstdlib>
using namespace std;
int* gf[16001];
int v[16001];
int sm[16001];
bool calc[16001];
void df(int vf, int n)
{
int i;
calc[vf]=1;
sm[vf]=v[vf];
for(i=1;i<=gf[vf][0];i++)
if(!calc[gf[vf][i]])
{
df(gf[vf][i],n);
if(sm[gf[vf][i]]>0)
sm[vf]+=sm[gf[vf][i]];
}
}
int main()
{
int n,i,y,x,mx;
freopen("asmax.in","r",stdin);
scanf("%d\n",&n);
for(i=1;i<=n;i++)
{
scanf("%d ",&v[i]);
gf[i]=(int*)realloc(gf[i],4);
gf[i][0]=0;
}
for(i=1;i<n;i++)
{
scanf("%d %d\n",&x,&y);
gf[x][0]++;
gf[x]=(int*)realloc(gf[x],(gf[x][0]+1)*4);
gf[x][gf[x][0]]=y;
gf[y][0]++;
gf[y]=(int*)realloc(gf[y],(gf[y][0]+1)*4);
gf[y][gf[y][0]]=x;
}
fclose(stdin);
df(1,n);
mx=sm[1];
for(i=2;i<=n;i++)
if(mx<sm[i])
mx=sm[i];
freopen("asmax.out","w",stdout);
printf("%d\n",mx);
fclose(stdout);
return 0;
}