Cod sursa(job #164199)

Utilizator FlorinC1996Florin C FlorinC1996 Data 23 martie 2008 17:41:01
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <cstdio>   
#include <vector>   
  
using namespace std;   
  
#define Nmax 16384   
#define INF 0x3f3f3f3f   
#define pb push_back   
#define sz size()   
  
int n;   
vector<int> lv[Nmax];   
int sir[Nmax], v[Nmax], p[Nmax], sol = -INF;   
  
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;   
}