Cod sursa(job #2423404)

Utilizator AlexBolfaAlex Bolfa AlexBolfa Data 21 mai 2019 12:37:54
Problema Asmax Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 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,i,sz=Nod[x].size();

    for(i=0;i<sz;++i){
        if(Nod[x][i]!=y){
            t+=Dp(Nod[x][i],x);
            if(t<0)
                t=0;
        }
        maxx=max(maxx,t);
    }

    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=0;i<n;++i){
        fin>>x>>y;
        Nod[x].push_back(y);
        Nod[y].push_back(x);
    }
}