Cod sursa(job #1800045)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 7 noiembrie 2016 11:22:10
Problema Asmax Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <stdio.h>
#define lim 16005
#define inf 2000000000
int v[lim],viz[lim],vecin[lim],first[lim],next[lim],k;
int max(int a,int b){
    if(a>b)
        return a;
    else
        return b;
}
void adauga(int nod,int fiu){
    k++;
    vecin[k]=fiu;
    next[k]=first[nod];
    first[nod]=k;
}
int dfs(int nod){
    int p=first[nod],rasp=-inf;
    viz[nod]=1;
    while(p!=0){
        if(viz[vecin[p]]==0)
            v[nod]+=max(0,dfs(vecin[p]));
        p=next[p];
    }
    if(v[nod]>rasp)
        rasp=v[nod];
    return v[nod];
}
int main(){
    FILE *fin,*fout;
    fin=fopen("asmax.in","r");
    fout=fopen("asmax.out","w");
    int i,x,y,n,maxim=-16000000;
    fscanf(fin,"%d",&n);
    for(i=1;i<=n;i++){
        fscanf(fin,"%d",&v[i]);
        if(v[i]>maxim)
            maxim=v[i];
    }
    for(i=1;i<n;i++){
        fscanf(fin,"%d%d",&x,&y);
        adauga(x,y);
        adauga(y,x);
    }
    fprintf(fout,"%d",dfs(1));
    fclose(fin);
    fclose(fout);
    return 0;
}