Cod sursa(job #2986920)

Utilizator LucaMuresanMuresan Luca Valentin LucaMuresan Data 1 martie 2023 17:01:14
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in ("asmax.in");
ofstream out ("asmax.out");

const int NMAX = 16e3;

int a[NMAX + 5];
vector<int> g[NMAX + 5];
int dp[NMAX + 5]; /// dp[u] = suma maxima a unui subarbore cu radacina in u

void dfs (int u, int w = 0)
{
    dp[u] = a[u];

    for (int v : g[u])
    {
        if (v != w)
        {
            dfs(v, u);
            if (dp[v] > 0)
                dp[u] += dp[v];
        }
    }
}

int main()
{
    int n;
    in >> n;

    for (int i=1; i<=n; i++)
        in >> a[i];

    for (int i=1; i<n; i++)
    {
        int u, v;
        in >> u >> v;

        g[u].push_back(v);
        g[v].push_back(u);
    }

    dfs(1);

    int ans = -2e9;

    for (int i=1; i<=n; i++)
    {
        ans = max(ans, dp[i]);
    }

    out << ans;

    return 0;
}