Cod sursa(job #1799906)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 6 noiembrie 2016 23:14:11
Problema Asmax Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <stdio.h>
#define lim 16005
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;
    if(first[nod]==0)
        first[nod]=k;
    else{
        next[k]=first[nod];
        first[nod]=k;
    }
}
int dfs(int nod){
    viz[nod]=1;
    int p=first[nod];
    while(p!=NULL){
        if(viz[vecin[p]]==0)
            return +max(0,dfs(vecin[p]));
        p=next[p];
    }
    return +max(0,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);
    }
    int rasp=dfs(1);
    if(rasp==0)
        rasp=maxim;
    fprintf(fout,"%d",rasp);
    fclose(fin);
    fclose(fout);
    return 0;
}