Cod sursa(job #1151518)

Utilizator AndreeaBaltaBalta Andreea Cristina AndreeaBalta Data 24 martie 2014 10:41:59
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>

using namespace std;

FILE *in, *out;

int num, viz[16001], sum[16001], urm[32001], vf[32001], lst[16001], m, maxim = -170000;

void dfs(int x)
{
    int y, p;
    viz[x] = true;
    p = lst[x];
    while(p != 0)
    {
        y = vf[p];
        if(!viz[y])
        {
            dfs(y);
            if(sum[y] > 0)
                sum[x] += sum[y];
        }
        p = urm[p];
    }
    //fprintf(out, "scor[%d] = %d\n", x, sum[x]);
    if(sum[x] > maxim)
        maxim = sum[x];
}

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

int main()
{

    in = fopen("asmax.in", "r");
    out = fopen("asmax.out", "w");
    int i, n, x, y;
    fscanf(in, "%d", &n);
    for(i = 1; i <= n; i++)
    {
        fscanf(in, "%d", &sum[i]);
    }
    for(i = 1; i < n; i++)
    {
        fscanf(in, "%d", &x);
        fscanf(in, "%d", &y);
        adauga(x, y);
        adauga(y, x);
    }
    dfs(1);
    fprintf(out, "%d", maxim);
    return 0;
}