Pagini recente » Cod sursa (job #2258428) | Cod sursa (job #2551926) | Cod sursa (job #1917736) | Cod sursa (job #1031717) | Cod sursa (job #277448)
Cod sursa(job #277448)
#include <stdio.h>
struct nod
{
int inf;
nod *next;
}*sir[100010];
int n,val[100010],a,b,v,S_max,viz[100010];
void baga()
{
nod *q=new nod;
q->inf=a;
q->next=sir[b];
sir[b]=q;
q=new nod;
q->inf=b;
q->next=sir[a];
sir[a]=q;
}
void citire()
{
scanf ("%d",&n);
for (int i=1;i<=n;i++)
scanf ("%d ",&val[i]);
for (int i=0;i<n;i++)
{
scanf ("%d %d",&a,&b);
baga();
}
}
inline int maxim(int a,int b)
{
return a>b?a:b;
}
int df(int N)
{
int S=val[N];
for (nod *i=sir[N];i;i=i->next)
if (!viz[i->inf])
{
viz[i->inf]=1;
v=df(i->inf);
if (v>0)
S+=v;
}
S_max=maxim(S_max,S);
return S;
}
int main ()
{
freopen ("asmax.in","r",stdin);
freopen ("asmax.out","w",stdout);
citire();
viz[1]=1;
S=-0x3f3f3f;
df(1);
printf("%d\n",S_max);
return 0;
}