Cod sursa(job #141161)

Utilizator SycronVene Tian Sycron Data 22 februarie 2008 20:06:14
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#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;   
    }   
}