Cod sursa(job #1700374)

Utilizator andreicoman299Coman Andrei andreicoman299 Data 10 mai 2016 13:25:33
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXN 16000
#define INF 1000000000

int v[1+MAXN], start[1+MAXN], next[1+MAXN], d[1+MAXN], fth[1+MAXN];

int D(int nod){
    if(d[nod]==-INF){
        d[nod]=v[nod];
        int i=start[nod];
        while(i!=0){
            if(D(i)>0)
                d[nod]+=D(i);
            i=next[i];
        }
    }
    return d[nod];
}

int main(){
    int n;
    FILE*fi,*fo;
    fi=fopen("asmax.in","r");
    fo=fopen("asmax.out","w");
    fscanf(fi,"%d", &n);
    for(int i=1;i<=n;i++){
        fscanf(fi,"%d", &v[i]);
        d[i]=-INF;
    }
    for(int i=1;i<n;i++){
        int a, b;
        fscanf(fi,"%d%d", &a, &b);
        if(fth[b]==0){
            next[b]=start[a];
            start[a]=b;
            fth[b]=a;
        }
        else{
            next[a]=start[b];
            start[b]=a;
            fth[a]=b;
        }
    }
    int maxim=-INF;
    for(int i=1;i<=n;i++){
        if(D(i)>maxim)
            maxim=D(i);
        //printf("%d %d\n", i, D(i));
    }
    fprintf(fo,"%d", maxim);
    fclose(fi);
    fclose(fo);
    return 0;
}