Cod sursa(job #2647518)

Utilizator mex7Alexandru Valentin mex7 Data 5 septembrie 2020 09:59:22
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <bits/stdc++.h>
#define ll long long
using namespace std;

ifstream fin("asmax.in");
ofstream fout("asmax.out");
int n, x, y, v[16001], result = INT_MIN;
vector <int> edges[16001];
bitset <16001> reached;

int dfs(int current) {
    reached[current] = 1;
    int maxCurrent = v[current];

    for (int edge : edges[current])
        if (!reached[edge]) {
            int branchCost = dfs(edge);
            maxCurrent = max(maxCurrent, branchCost + maxCurrent);
            result = max(result, branchCost);
        }

    return maxCurrent;
}

int main() {
    fin >> n;
    for (int i = 1; i <= n; i++)
        fin >> v[i];
    for (int i = 1; i < n; i++) {
        fin >> x >> y;
        edges[x].push_back(y);
        edges[y].push_back(x);
    }

    result = max(result, dfs(1));
    fout << result;

    return 0;
}