Cod sursa(job #1652390)

Utilizator mihai.constantinConstantin Mihai mihai.constantin Data 14 martie 2016 22:16:16
Problema Asmax Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <fstream>
using namespace std;

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

const int N_max = 16005;

int vf[2 * (N_max - 1)];
int urm[2 * (N_max - 1)];
int lst[N_max];
int nr;

int s[N_max];

bool viz[N_max];

int scor[N_max];

int sol;

int N;

void adauga(int x, int y)
{
    // ADAUGA IN LISTA LUI  x PE y

    nr++;
    vf[nr] = y;
    urm[nr] = lst[x];
    lst[x] = nr;
}

void dfs(int x)
{
    int y, p;

    viz[x] = true;

    // PARCURG VECINII y AI LUI x

    p = lst[x];

    while(p != 0)
    {
        y = vf[p];

        scor[x] += s[x];

        if(!viz[y]) dfs(y);

        if(scor[y] > 0) scor[x] += scor[y];

        p = urm[p];
    }
}

int main()
{
    int i, x, y;

    in >> N;

    for(i = 1; i <= N; i++) in >> s[i];

    for(i = 1; i < N; i++)
    {
        in >> x >> y;

        adauga(x, y);

        adauga(y, x);
    }

    dfs(1);

    sol = scor[1];

    for(i = 2; i <= N; i++) sol = max(sol, scor[i]);

    out << sol;

    return 0;
}