Cod sursa(job #2764499)

Utilizator andreiiorgulescuandrei iorgulescu andreiiorgulescu Data 21 iulie 2021 11:13:41
Problema Asmax Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,t[16005],v[16005],best[16005],rad;
vector<int>f[16005];

void citire()
{
    in >> n;
    for (int i = 1; i <= n; i++)
    {
        in >> v[i];
        best[i] = v[i];
    }
    for (int i = 1; i < n; i++)
    {
        int x,y;
        in >> x >> y;
        t[y] = x;
        f[x].push_back(y);
    }
    for (int i = 1; i <= n; i++)
        if (t[i] == 0)
            rad = i;
}

int rec(int p)
{
    for (int i = 0; i < f[p].size(); i++)
    {
        if (best[p] >= v[p])
            best[p] += max(0,rec(f[p][i]));
        else
            best[p] = v[p];
    }
    return best[p];
}

void fin()
{
    int maxim = -1e9;
    for (int i = 1; i <= n; i++)
        if (best[i] > maxim)
            maxim = best[i];
    if (maxim == 0)
    {
        maxim = -1e3;
        for (int i = 1; i <= n; i++)
            if (v[i] > maxim)
                maxim = v[i];
    }
    out << maxim;
}

int main()
{
    citire();
    rec(rad);
    fin();
    return 0;
}