Cod sursa(job #2056203)

Utilizator ciprianprohozescuProhozescu Ciprian ciprianprohozescu Data 4 noiembrie 2017 09:55:06
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <fstream>
#include <vector>
#define NMAX 16010
#define INF 1010

using namespace std;

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

int n, v[NMAX], maxim = -INF, dp[NMAX], sol = -INF;
bool pozitiv, viz[NMAX];
vector<int> A[NMAX];

void dfs(int nod);

int main()
{
    int i, a, b;
    fin >> n;
    for (i = 1; i <= n; i++)
    {
        fin >> v[i];
        if (v[i] >= 0)
            pozitiv = true;
        if (v[i] > maxim)
            maxim = v[i];
    }
    if (!pozitiv)
    {
        fout << maxim << '\n';
        fout.close();
        return 0;
    }
    for (i = 1; i < n; i++)
    {
        fin >> a >> b;
        A[a].push_back(b);
        A[b].push_back(a);
    }
    dfs(1);
    fout << sol << '\n';
    fout.close();
    return 0;
}

void dfs(int nod)
{
    int i, urm;
    viz[nod] = true;
    for (i = 0; i < A[nod].size(); i++)
    {
        urm = A[nod][i];
        if (!viz[urm])
        {
            dfs(urm);
            dp[nod] += max(dp[urm], 0);
        }
    }
    dp[nod] += v[nod];
    if (dp[nod] > sol)
        sol = dp[nod];
}