Cod sursa(job #1800056)

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