Cod sursa(job #42650)

Utilizator victorsbVictor Rusu victorsb Data 29 martie 2007 13:22:11
Problema Asmax Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <cstdio>
#include <vector>

using namespace std;

#define Nmax 16384
#define pb push_back
#define sz size()

int n;
vector<int> lv[Nmax];
int sir[Nmax], v[Nmax], p[Nmax], sol;

void citire()
{
    int i, a, b;
    
    scanf("%d\n", &n);
    for (i = 1; i <= n; ++i)
        scanf("%d", &sir[i]);
    
    for (i = 1; i < n; ++i)
    {
        scanf("%d %d", &a, &b);
        lv[a].pb(b);
        lv[b].pb(a);
    }
}

void df(int nod)
{
    int i, lim = lv[nod].sz;
    
    v[nod] = 1;
    p[nod] = sir[nod];
    
    for (i = 0; i < lim; ++i)
        if (!v[lv[nod][i]])
        {
            df(lv[nod][i]);
            if (p[lv[nod][i]] > 0)
                p[nod] += p[lv[nod][i]];
        }
    
    if (p[nod] > sol)
        sol = p[nod];
}

void solve()
{
    df(1);
    printf("%d\n", sol);
}

int main()
{
    freopen("asmax.in", "r", stdin);
    freopen("asmax.out", "w", stdout);
    citire();
    solve();
    return 0;
}