Cod sursa(job #2199285)

Utilizator cip_ionescuCiprian Ionescu cip_ionescu Data 27 aprilie 2018 10:11:24
Problema Asmax Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <iostream>
#include <fstream>
#define MAX_NM 16001

using namespace std;

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

int n, nr, vf[2 * MAX_NM], urm[2 * MAX_NM], lst[MAX_NM], viz[MAX_NM], v[MAX_NM], smax;

void adauga(int x, int y)
{
    nr++;
    vf[nr] = y;
    urm[nr] = lst[x];
    lst[x] = nr;
}

int dfs(int x)
{
    viz[x] = true;

    int p = lst[x], y, d, s = v[x];

    while (p != 0) {
        y = vf[p];
        if (!viz[y]) if ((d = dfs(y)) >= 0) s += d;
        p = urm[p];
    }

    if (s > smax) smax = s;

    return s;
}

int main()
{
    int x, y;
    fin >> n;
    for (int i = 1 ; i <= n ; i++) fin >> v[i];
    for (int i = 1 ; i < n ; i++) {
        fin >> x >> y;
        adauga(x, y);
        adauga(y, x);
    }
    dfs(1);

    fout << smax;
    return 0;
}