Cod sursa(job #3352236)

Utilizator Andrei1209Andrei Mircea Andrei1209 Data 25 aprilie 2026 12:53:35
Problema Cerere Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");

const int Nmax = 16000 + 5;
vector <int> vecini[Nmax];
int dp[Nmax], val[Nmax], sol;

void dfs(int nod, int tata )
{
    dp[nod] = val[nod];
    for ( int vecin : vecini[nod] )
    {
        if ( vecin != tata )
        {
            dfs(vecin, nod);
            if ( dp[vecin] > 0 )
                dp[nod] += dp[vecin];
        }
    }
    sol = max(sol, dp[nod]);
}
int main()
{
    int n;
    fin >> n;
    int i;
    sol = -1e9;
    for ( i = 1; i <= n; ++i )
    {
        fin >> val[i];
        sol = max(sol, val[i]);
    }

    for ( i = 1; i < n; ++i )
    {
        int a, b;
        fin >> a >> b;
        vecini[a].push_back(b);
        vecini[b].push_back(a);

    }

    dfs( 1, -1);
    fout << sol << endl;
    return 0;
}