Cod sursa(job #912794)

Utilizator narcis_vsGemene Narcis - Gabriel narcis_vs Data 12 martie 2013 19:23:13
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<cstdio>
#include<vector>
#define In "asmax.in"
#define Out "asmax.out"
#define N 16004
#define oo 2000
using namespace std;
vector< int > v[N],c,sum;
int n,poz,sol;
void Citire()
{
    int i,x,y;
    freopen(In,"r",stdin);
    freopen(Out,"w",stdout);
    scanf("%d",&n);
    c.resize(n+1);sum.resize(n+1);
    for(i=1;i<=n;i++)
        scanf("%d",&c[i]);
    for(i=1;i<n;i++)
    {
        scanf("%d %d",&x,&y);
        v[x].push_back(y);
        v[y].push_back(x);
    }
}
void Dfs(int nod)
{
    sum[nod] = c[nod];
    int i,lim,vec;
    lim = v[nod].size();
    for(i=0;i<lim;i++)
    {
        vec = v[nod][i];
        if(sum[vec]==-oo)
        {
            Dfs(vec);
            if(sum[nod]+sum[vec] > sum[nod])
                sum [nod] += sum[vec];
        }
    }
    if(sum[nod]>sol)
        sol = sum[nod];
}

void Init()
{
    int i;
    for(i=1;i<=n;i++)
        sum[i] = -oo;
    sol = -oo;
}

int main()
{
    Citire();
    Init();
    Dfs(1);
    printf("%d\n",sol);
    return 0;
}