Cod sursa(job #3159753)

Utilizator AswVwsACamburu Luca AswVwsA Data 21 octombrie 2023 22:11:54
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
//oftica si durere in suflet
#include <fstream>
#include <vector>
#include <climits>
#define ll long long

using namespace std;

//d[i] = sum. max. a unui subgraf din subarborele lui i

//d[i] = suma de max(0, d[copil]) + v[i]

const int NMAX = 16000;

vector <int> g[NMAX + 1];
int d[NMAX + 1];
int v[NMAX + 1];

void dfs(int nod, int parent)
{
    d[nod] = 0;
    for (int x : g[nod])
        if (x != parent)
        {
            dfs(x, nod);
            d[nod] += max(0, d[x]);
        }
    d[nod] += v[nod];
}

signed main()
{
    ifstream cin("asmax.in");
    ofstream cout("asmax.out");
    int n, i;
    cin >> n;
    for (i = 1; i <= n; i++)
        cin >> v[i];
    for (i = 2; i <= n; i++)
    {
        int a, b;
        cin >> a >> b;
        g[a].push_back(b);
        g[b].push_back(a);
    }
    dfs(1, 0);
    int ans = INT_MIN;
    for (i = 1; i <= n; i++)
        ans = max(ans, d[i]);
    cout << ans;
}