Pagini recente » Cod sursa (job #1846980) | Cod sursa (job #2207990) | Cod sursa (job #2468564) | Cod sursa (job #3250529) | Cod sursa (job #1510685)
#include <iostream>
#include <fstream>
#include <stdlib.h>
#define nmax 16006
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
long *g[nmax];
long d[nmax],viz[nmax],sumamax=-160060000;
void parcurge(long x)
{ viz[x]=1;
for(long i=1;i<=g[x][0];i++)
if(!viz[g[x][i]])
{parcurge(g[x][i]);
if(d[g[x][i]]>0)
d[x]+=d[g[x][i]];
}
if(d[x]>sumamax)sumamax=d[x];
}
int main()
{long n,i,x,a,b;
fin>>n;
for(i=1;i<=n;i++)
{
g[i]=(long*)realloc(g[i],sizeof(long));
g[i][0]=0;
fin>>x;
d[i]=x;
}
for(i=1;i<n;i++)
{
fin>>a>>b;
g[a][0]++;
g[a]=(long*)realloc(g[a],(g[a][0]+1)*sizeof(long));
g[a][g[a][0]]=b;
g[b][0]++;
g[b]=(long*)realloc(g[b],(g[b][0]+1)*sizeof(long));
g[b][g[b][0]]=a;
}
parcurge(1);
fout<<sumamax;
}