Cod sursa(job #1054237)

Utilizator hrazvanHarsan Razvan hrazvan Data 13 decembrie 2013 15:32:01
Problema Asmax Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>
#define NR 16000
#define INF 999999999
FILE *in,*out;
typedef struct{
    int vf,next;
}lista;
lista l[2*NR+1];
int v[NR+1],ultim[NR+1],rez[NR+1];

void dfs(int x){
    rez[x]=v[x];
    int nr,y;
    nr=ultim[x];
    while(nr>0){
        y=l[nr].vf;
        if(rez[y]==-INF){
            dfs(y);
            if(rez[y]>0){
                rez[x]+=rez[y];
            }
        }
        nr=l[nr].next;
    }
    return ;
}

int main()
{
    in=fopen("asmax.in","r");
    out=fopen("asmax.out","w");
    int n,x,y,k=0,i;
    fscanf(in,"%d",&n);
    for(i=1;i<=n;i++){
        fscanf(in,"%d",&v[i]);
        rez[i]=-INF;
    }
    for(i=1;i<n;i++){
        fscanf(in,"%d%d",&x,&y);
        k++;
        l[k].vf=y;
        l[k].next=ultim[x];
        ultim[x]=k;
        k++;
        l[k].vf=x;
        l[k].next=ultim[y];
        ultim[y]=k;
    }
    dfs(1);
    int max=-INF;
    for(i=1;i<=n;i++){
        if(max<rez[i])  max=rez[i];
    }
    fprintf(out,"%d",max);
    return 0;
}