Cod sursa(job #1541131)

Utilizator lacraruraduRadu Matei Lacraru lacraruradu Data 3 decembrie 2015 19:43:04
Problema Asmax Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>

using namespace std;

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

#define N 16005

int n;
int vf[2*N], urm[2*N], lst[2*N], nr, val[N], maxim, s[N];
bool ok[N];

void dfs(int x)
{
    ok[x] = 1;
    s[x] = val[x];
    for(int i = lst[x]; i; i = urm[i])
        if(ok[vf[i]] == 0)
        {
            dfs(vf[i]);
            if (s[vf[i]] > 0)
                s[x] += s[vf[i]];
        }
    if (s[x] > maxim)
        maxim = s[x];
}

int main()
{
    in >> n;
    for(int i = 1; i <= n; i++)
        in >> val[i];

    for(int i = 1; i < n; i++)
    {
        int x, y;
        in >> x >> y;
        vf[++nr] = y;
        urm[nr] = lst[x];
        lst[x] = nr;
        vf[++nr] = x;
        urm[nr] = lst[y];
        lst[y] = nr;
    }

    dfs(1);
    out << maxim << '\n';
    return 0;
}