Cod sursa(job #1054250)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 13 decembrie 2013 15:44:33
Problema Asmax Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <stdio.h>
#define NMAX 16001
int val[2*NMAX],next[2*NMAX],last[NMAX],rez[NMAX],ok[NMAX],v[NMAX];
void dfs(int x){
    int y,poz;
    ok[x]=1;
    rez[x]=v[x];
    poz=last[x];
    while(poz!=0){
        y=val[poz];
        if(ok[y]==0){
            ok[y]=1;
            dfs(y);
            if(rez[y]>0){
                rez[x]+=rez[y];
            }
        }
        poz=next[poz];
    }
}
int main(){
    int n,i,k,x,y,max;
    FILE *fin,*fout;
    fin=fopen("asmax.in","r");
    fout=fopen("asmax.out","w");
    fscanf(fin,"%d",&n);
    for(i=1;i<=n;i++){
        fscanf(fin,"%d",&v[i]);
    }
    k=0;
    for(i=1;i<n;i++){
        fscanf(fin,"%d%d",&x,&y);
        k++;
        val[k]=x;
        next[k]=last[y];
        last[y]=k;
        k++;
        val[k]=y;
        next[k]=last[x];
        last[x]=k;
    }
    dfs(1);
    max=-2000000000;
    for(i=1;i<=n;i++){
        if(max<rez[i]){
            max=rez[i];
        }
    }
    fprintf(fout,"%d\n",rez[1]);
    fclose(fin);
    fclose(fout);
    return 0;
}