Cod sursa(job #2740170)

Utilizator AlexZeuVasile Alexandru AlexZeu Data 11 aprilie 2021 19:44:19
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <bits/stdc++.h>
#define ll long long
#define for1 (n) for (int i = 1; i <= n; ++i)
#define for0 (n) for (int i = 0; i < n; ++i)
using namespace std;

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

const int maxN = 16 * 1e3 + 5;

int n, dp[maxN], best_ans = INT_MIN;
vector<int> edges[maxN];
bitset<16005> visited;

void dfs(int x) {
    visited[x] = true;
    if (edges[x].size() == 1 && x != 1) {
        return;
    }
    for (int i= 0; i < edges[x].size(); ++i) {
        if (visited[edges[x][i]] == false) {
            dfs(edges[x][i]);
            if (dp[edges[x][i]] > 0) {
                dp[x] += dp[edges[x][i]];
            }
        }
    }
}

int main() {
    fin.tie(0); fout.tie(0);
    ios::sync_with_stdio(0);
    fin >> n;
    for (int i = 1; i <= n; ++i) {
        fin >> dp[i];
    }
    for (int i = 1; i < n; ++i) {
        int x, y; fin >> x >> y;
        edges[x].push_back(y);
        edges[y].push_back(x);
    }
    dfs(1);
    for (int i = 1; i <= n; ++i) {
        if (dp[i] > best_ans) {
            best_ans = dp[i];
        }
    }
    fout << best_ans;
    return 0;
}