Cod sursa(job #410667)

Utilizator hasegandaniHasegan Daniel hasegandani Data 4 martie 2010 15:35:22
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<stdio.h>
#include<vector>

using namespace std;

#define Nmax 16005
#define inf 0x3f3f3f3f

vector<int> l[Nmax];
int N,d[Nmax],p[Nmax];
int v[Nmax];

void DF(int k)
{
    v[k]=1;

    int Sum=0;
    for(int i=0;i<(int)l[k].size();++i)
        if (!v[l[k][i]])
            {
            DF(l[k][i]);
            if (p[ l[k][i] ] > 0)
                Sum += p[ l[k][i] ];
            }
    p[k] = Sum + d[k];
}

void solve()
{
    DF(1);

    int Sol=-inf;
    for(int i=1;i<=N;++i)
        if (Sol < p[i])
            Sol = p[i];
    printf("%d\n",Sol);
}

void cit();

int main()
{
    cit();
    solve();
    return 0;
}

void cit()
{
    int a,b;
    freopen("asmax.in","r",stdin);
    freopen("asmax.out","w",stdout);
    scanf("%d",&N);
    for(int i=1;i<=N;++i)
        scanf("%d",&d[i]);
    for(int i=1;i<N;++i)
        {
        scanf("%d%d",&a,&b);
        l[a].push_back(b);
        l[b].push_back(a);
        }
}