Pagini recente » Cod sursa (job #2844260) | Cod sursa (job #2779495) | Cod sursa (job #1924188) | Cod sursa (job #1543595) | Cod sursa (job #159346)
Cod sursa(job #159346)
#include<stdio.h>
struct nod{long int info;nod *next;};
nod *p[16002];
long int n,i,i1,i2,v[16002],viz[16002],smax;
void pune();
void df(long int ii);
int main()
{
FILE *f,*g;f=fopen("asmax.in","r");g=fopen("asmax.out","w");
fscanf(f,"%ld",&n);
for(i=1;i<=n;i++) fscanf(f,"%ld",&v[i]);
for(i=1;i<n;i++)
{fscanf(f,"%ld%ld",&i1,&i2);pune();}
df(1);
smax=-16000001;
for(i=1;i<=n;i++) smax=(v[i]>smax)?v[i]:smax;
fprintf(g,"%ld",smax);
fcloseall();
return 0;
}
void pune()
{
nod *paux;
paux=new nod;
paux->info=i1;
if(!p[i2]){paux->next=0;p[i2]=paux;}
else{paux->next=p[i2];p[i2]=paux;}
paux=new nod;
paux->info=i2;
if(!p[i1]){paux->next=0;p[i1]=paux;}
else{paux->next=p[i1];p[i1]=paux;}
}
void df(long int ii)
{
long int jj;
nod *paux;
paux=p[ii];viz[ii]=1;
while(paux)
{ jj=paux->info;
if(!viz[jj]){df(jj);if(v[jj]>0)v[ii]+=v[jj];}
paux=paux->next;
}
}