Cod sursa(job #1344033)

Utilizator turbowin120Amarandei-Stanescu Alexandru turbowin120 Data 16 februarie 2015 11:24:55
Problema Asmax Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <stdio.h>
using namespace std;

const int N=16001;
int lst[N],urm[N],fiu[N],nr,vf[N],v[N],best[N],summax=-1000000;
int n;
bool ver[N];
inline void adauga(int x, int y){
    nr++;
    vf[nr]=y;
    urm[nr]=lst[x];
    lst[x]=nr;

}

void citire(){

    FILE *in;
    in=fopen("asmax.in","r");
    fscanf(in,"%d",&n);
    for(int i=1;i<=n;i++) fscanf(in,"%d",&v[i]);
    for(int i=1;i<n;i++){
        int a,b;
        fscanf(in,"%d%d",&a,&b);
        adauga(a,b);
        fiu[b]++;

    }


}

inline int maxim(int x, int y){
    if(x>y) return x;
    return y;
}

int dfs(int x){

    ver[x]=1;
    best[x]=v[x];
    int p,y;
    p=lst[x];
    while(p!=0){
        y=vf[p];
        if(ver[y]==0) dfs(y);
        best[x]=maxim(best[x],best[y]+best[x]);

        p=urm[p];
    }
    summax=maxim(summax,best[x]);
}

int cauttata(){
    for(int i=1;i<=n;i++) if(fiu[i]==0) return i;
}

int main()
{
    citire();

    dfs(cauttata());
    FILE *out;
    out=fopen("asmax.out","w");
    fprintf(out,"%d",summax);
    return 0;
}