Cod sursa(job #1148969)

Utilizator IonSebastianIon Sebastian IonSebastian Data 21 martie 2014 12:58:09
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>

using namespace std;

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

const int MAX_N = 16000;

int lst[MAX_N+1], vf[2*MAX_N+2], urm[2*MAX_N+2], cost[MAX_N+1], suma[MAX_N+1];
int m, maxim = -16001;

bool viz[MAX_N+1];

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

void dfs(int x)
{
    int y, p, sum, aux;
    sum = cost[x];
    viz[x] = true;
    p = lst[x];
    while(p != 0)
    {
        y = vf[p];
        if(!viz[y])
        {
            dfs(y);
            if(suma[y] > 0)
            {
                sum += suma[y];
            }
        }
        p = urm[p];
    }
    suma[x] = sum;
    if(suma[x] > maxim)
    {
        maxim = suma[x];
    }
}

int main()
{
    int n, i, a, b;
    in >> n;
    for(i = 1; i <= n; i++)
    {
        in >> cost[i];
    }
    for(i = 1; i <= n-1; i++)
    {
        in >> a >> b;
        add(a,b);
        add(b,a);
    }
    dfs(1);
    out << maxim;
    return 0;
}