Cod sursa(job #3263515)

Utilizator Her0ninjaDragos Rolland Her0ninja Data 14 decembrie 2024 17:14:36
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>
using namespace std;

vector<int> values;
vector<vector<int>> tree;
vector<bool> visited;

int dfs(int node, int& max_sum) {
    visited[node] = true;
    int current_sum=values[node];

    for (int neighbor:tree[node]) {
        if (!visited[neighbor]) {
            current_sum += max(0, dfs(neighbor, max_sum));
        }
    }
    max_sum = max(max_sum, current_sum);
    return current_sum;
}

int main() {
    ifstream f("asmax.in");
    ofstream g("asmax.out");
    int N;
    f >> N;

    values.resize(N + 1);
    tree.resize(N + 1);
    visited.resize(N + 1, false);


    for (int i = 1; i <= N; ++i) {
        f >> values[i];
    }

    for (int i = 0; i < N - 1; ++i) {
        int a, b;
        f >> a >> b;
        tree[a].push_back(b);
        tree[b].push_back(a);
    }
    int max_sum = -1000000;
    dfs(1, max_sum);
    g << max_sum << endl;
    f.close();
    g.close();
    return 0;
}