Cod sursa(job #2563219)

Utilizator KappaClausUrsu Ianis Vlad KappaClaus Data 1 martie 2020 08:50:25
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <bits/stdc++.h>
using namespace std;

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

const int N_MAX = 16e3 + 1;

vector<int> cost(N_MAX);
vector<vector<int>> tree(N_MAX, vector<int>());
int N;

int ans = -(1<<29);

int dp_dfs(int node, int parent)
{
    int sum = 0;

    for(int next : tree[node])
    {
        if(next == parent) continue;

        int sub_sum = dp_dfs(next, node);

        if(sub_sum > 0)
            sum += sub_sum;
    }

    sum += cost[node];

    ans = max(ans, sum);

    return sum;
}

int main()
{
    fin >> N;

    for(int i = 1; i <= N; ++i)
        fin >> cost[i];

    for(int x, y, i = 1; i < N; ++i)
        fin >> x >> y, tree[x].push_back(y), tree[y].push_back(x);

    dp_dfs(1, -1);

    fout << ans;
}