Cod sursa(job #1857772)

Utilizator roxannemafteiuMafteiu-Scai Roxana roxannemafteiu Data 26 ianuarie 2017 17:26:46
Problema Asmax Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <bits/stdc++.h>

using namespace std;

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

const int N_MAX = 16e3 + 1;

int n;
vector <int> graph[N_MAX];
vector <int> values(N_MAX), sum(N_MAX);
bitset <N_MAX> visited;

void read() {
    int x, y;

    fin >> n;
    values.emplace_back(0);
    for (int i = 1; i <= n; ++i) {
        fin >> x;
        values.emplace_back(x);
    }

    for (int i = 1; i < n; ++i) {
        fin >> x >> y;
        graph[x].emplace_back(y);
        graph[y].emplace_back(x);
    }
}

void dfs(int node) {
    visited.set(node);
    sum[node] = values[node];

    for (const auto &son : graph[node]) {
        if (!visited[son]) {
            dfs(son);
            if (sum[son] > 0) {
                sum[node] += sum[son];
            }
        }
    }
}

void solve() {
    for (int i = 1; i <= n; ++i) {
        if(!visited[i]) {
            dfs(i);
        }
    }

    int maxim = sum[1];
    for (int i = 1; i <= n; ++i) {
        if (sum[i] > maxim) {
            maxim = sum[i];
        }
    }

    fout << maxim;
}

int main() {
    read();
    solve();

    return 0;
}