Cod sursa(job #3157864)

Utilizator PHOSSESSEDProsie Radu-Teodor PHOSSESSED Data 17 octombrie 2023 09:58:45
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda HLO 2023 - Lot - Tema 0 Marime 0.97 kb
#include<iostream>
#include<vector>
#define pb push_back
using namespace std;

const int NMAX = 16e3 + 1;
const int MINF = -1e9;

vector<int> dp(NMAX,MINF);
vector<int> vecini[NMAX];
vector<int> v(NMAX);
vector<bool> in(NMAX);

//dp[i] = suma maxima a unui subarbore care sa il contina pe i

int dinamica(int nod)
{
    in[nod] = 1;
    dp[nod] = v[nod];
    for(auto it : vecini[nod])
        {
            if(in[it])
                continue;

            dp[nod] += max(dinamica(it),0);
        }

    in[nod] = 0;
    return dp[nod];
}

int main()
{
    freopen("asmax.in","r",stdin);
    freopen("asmax.out","w",stdout);

    int n,a,b; cin >> n;
    for(int i = 1; i <= n ; i++) cin >> v[i];
    for(int i = 1 ; i < n ; i++)
        {
            cin >> a >> b;

            vecini[a].pb(b);
            vecini[b].pb(a);
        }

    int rez = dinamica(1);
    for(int i = 1; i <= n ; i++) rez = max(rez,dp[i]);
    cout << rez;

}