Cod sursa(job #3264939)

Utilizator StefanStratonStefan StefanStraton Data 25 decembrie 2024 21:23:05
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>
#include <vector>

using namespace std;

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

int n;
vector <int> valori;
vector <vector <int>> lista;
vector <bool> viz;

int dfs(int nod, int& sum) {
    viz[nod] = true;
    int now = valori[nod];

    for (int elm : lista[nod]) {
        if (!viz[elm]) {
            now += max(0, dfs(elm, sum));
        }
    }
    sum = max(sum, now);
    return now;
}

int main()
{
    in >> n;

    valori.resize(n + 1);
    lista.resize(n + 1);
    viz.resize(n + 1);


    for(int i = 1; i <= n; i++)
        in >> valori[i];
    for(int i = 1; i <= n - 1; i++){
        int x, y;
        in >> x >> y;
        lista[x].push_back(y);
        lista[y].push_back(x);
    }
    int sum = -1000000;
    dfs(1, sum);
    out << sum << endl;
    return 0;
}