Cod sursa(job #2840076)

Utilizator amcbnCiobanu Andrei Mihai amcbn Data 27 ianuarie 2022 08:54:35
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
/* [A][M][C][B][N] / [K][R][I][P][6][8] */
#include <bits/stdc++.h>
using namespace std;
const int mod = 104659, inf = 0x3f3f3f3f;
const char sp = ' ', nl = '\n';
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int n;
vector<int> v;
vector<long long> dp;
vector<vector<int>> e;
long long ans = -inf;

void dfs(int node) {
    for (auto& son : e[node]) {
        for (int i = 0; i < e[son].size(); ++i) {
            if (e[son][i] == node) {
                e[son].erase(e[son].begin() + i);
                break;
            }
        }
    }
    for (auto& son : e[node]) {
        dfs(son);
    }
}

void solve(int node) {
    dp[node] = v[node];
    for (auto& son : e[node]) {
        solve(son);
        if (dp[son] > 0)
            dp[node] += dp[son];
    }
    ans = max(ans, dp[node]);
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    fin >> n;
    v.assign(n + 2, 0), dp.assign(n + 2, 0);
    e.assign(n + 2, vector<int>());
    for (int i = 1; i <= n; ++i)
        fin >> v[i];
    for (int i = 1; i < n; ++i) {
        int a, b;
        fin >> a >> b;
        e[a].push_back(b);
        e[b].push_back(a);
    }
    dfs(1);
    solve(1);
    fout << ans;
}