Pagini recente » Cod sursa (job #1123219) | Cod sursa (job #2169080) | Cod sursa (job #2237389) | Cod sursa (job #2945561) | Cod sursa (job #13867)
Cod sursa(job #13867)
#include <stdio.h>
#define NMAX 16384
#define INF "asmax.in"
#define OUF "asmax.out"
long long s[NMAX];
char bit[NMAX]={0};
struct nod
{
long long x;
nod *next;
};
struct lst
{
nod *p,*q;
}list[NMAX];
void deeps(int vf)
{
if(list[vf].p!=NULL)
{
nod *op;
op=list[vf].p;
while(op!=NULL)
{
deeps(op->x);
if(s[op->x]>0) s[vf]+=s[op->x];
op=op->next;
}
}
}
int main()
{
long long n,i,a,b,v=1,max;
nod *op;
FILE *in,*out;
in=fopen(INF,"r");
out=fopen(OUF,"w");
fscanf(in,"%lld",&n);
for(i=1;i<=n;i++)
{
fscanf(in,"%lld",s+i);
list[i].p=list[i].q=NULL;
}
max=-16777216;
if(n>1)
{
fscanf(in,"%lld %lld",&a,&b);
op=new nod;
op->x=b;op->next=NULL;
if(list[a].p==NULL) list[a].p=list[a].q=op;
else
{
list[a].q->next=op;
list[a].q=op;
}
v=a;bit[b]=1;
// max=s[a]+s[b];
}
for(i=2;i<n;i++)
{
fscanf(in,"%lld %lld",&a,&b);
//if(s[a]+s[b]>max) max=s[a]+s[b];
op=new nod;
op->x=b;op->next=NULL;
if(list[a].p==NULL) list[a].p=list[a].q=op;
else
{
list[a].q->next=op;
list[a].q=op;
}
bit[b]=1;
}
for(i=1;i<=n;i++) if(!bit[i]) v=i;
deeps(v);
for(i=1;i<=n;i++) if(s[i]>max) max=s[i];
fprintf(out,"%lld",max);
fclose(in);fclose(out);
return 0;
}