Cod sursa(job #3336955)

Utilizator BeilandArnoldArnold Beiland BeilandArnold Data 26 ianuarie 2026 19:52:31
Problema Asmax Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <climits>
using namespace std;

void parcurgere(
    int v, int parent,
    const vector<vector<int>> &adj,
    const vector<int> &val,
    vector<int> &dp)
{
    if (adj[v].size() == 1) {
        dp[v] = val[v];
    }
    else {
        int suma = val[v];

        for (auto x : adj[v]) {
            if (x != parent) {
                parcurgere(x, v, adj, val, dp);
                if (dp[x] > 0) {
                    suma += dp[x];
                }
            }
        }

        dp[v] = suma;
    }
}

int main()
{
    ifstream fin("asmax.in");
    ofstream fout("asmax.out");

    int n;
    fin >> n;

    vector<int> val(n+1), dp(n+1, INT_MIN);
    for (int i = 1; i <= n; i++)
        fin >> val[i];

    vector<vector<int>> adj(n+1);
    for (int i = 1; i <= n-1; i++) {
        int a, b;
        fin >> a >> b;

        adj[a].push_back(b);
        adj[b].push_back(a);
    }

    parcurgere(1, -1, adj, val, dp);

    int solutie = INT_MIN;
    for (int i = 1; i <= n; i++)
        solutie = max(solutie, dp[i]);

    fout << solutie << "\n";
    return 0;
}