Pagini recente » Cod sursa (job #1797924) | Cod sursa (job #2285271) | Cod sursa (job #1007967) | Cod sursa (job #259848) | Cod sursa (job #277613)
Cod sursa(job #277613)
#include <cstdio>
using namespace std;
struct nod {int inf; nod *urm;} *arb[16001];
int n,val[16001],tata[16001],viz[16001];
int rad,smax,nr;
int max(int x, int y)
{
return x>y?x:y;
}
void baga(int x, int y)
{
nod *q=new nod;
q->inf=y;
q->urm=arb[x];
arb[x]=q;
q=new nod;
q->inf=x;
q->urm=arb[y];
arb[y]=q;
}
int dfs(int x)
{
int s=val[x];
viz[x]=1;
for(nod *i=arb[x];i;i=i->urm)
if(!viz[i->inf])
{
nr=dfs(i->inf);
if(nr>0)
s+=nr;
}
smax=max(s,smax);
return s;
}
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%d\n",&n);
for(int i=1;i<=n;i++)
scanf("%d\n",&val[i]);
int x,y;
for(int i=1;i<n;i++)
{
scanf("%d%d",&x,&y);
baga(x,y);
tata[y]=x;
}
for(int i=1;i<=n;i++)
if(tata[i]==0)
{
rad=i;
break;
}
dfs(rad);
printf("%d\n",smax);
return 0;
}