Cod sursa(job #2423431)

Utilizator AlexBolfaAlex Bolfa AlexBolfa Data 21 mai 2019 13:13:47
Problema Asmax Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <bits/stdc++.h>
#define INFINIT (int)(1e8)
#define MAX (int)(16e3+5)
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");

int n,Val[MAX],Best[MAX],ans;
vector<int> Nod[MAX];

int Dp(int,int);
void citire();

int main(){
    citire();
    Dp(1,1);
    fout<<ans<<'\n';
    return 0;
}
int Dp(int x,int y){
    if(Best[x]!=INFINIT)
        return Best[x];
    int t=0,maxx=0,maxval=-INFINIT,i,val,sz=Nod[x].size();
    bool ok=1;

    for(i=0;i<sz;++i){
        if(Nod[x][i]!=y){
            val=Dp(Nod[x][i],x);
            if(val>=0){
                t+=val;
                ok=0;
            }
            maxval=max(maxval,val);
        }
        maxx=max(maxx,t);
    }
    if(ok)t+=maxval;
    t=maxx;
    t+=Val[x];
    Best[x]=t;
    ans=max(ans,t);
    return t;
}
void citire(){
    int i,x,y;
    fin>>n;
    for(i=1;i<=n;++i){
        fin>>Val[i];
        Best[i]=INFINIT;
    }
    for(i=1;i<n;++i){
        fin>>x>>y;
        Nod[x].push_back(y);
        Nod[y].push_back(x);
    }
}