Cod sursa(job #1097495)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 3 februarie 2014 15:16:18
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <cstdio>
#include <vector>
#define Nmax 16005

using namespace std;

int N,dp[Nmax],v[Nmax];
bool viz[Nmax],fr[Nmax];
vector <int> L[Nmax];

inline void Dfs(int nod)
{
    int i,j,len;
    viz[nod]=true; len=L[nod].size();
    dp[nod]=v[nod];
    for(i=0;i<len;++i)
    {
        j=L[nod][i];
        if(!viz[j])
        {
            Dfs(j);
            if(dp[j]>0)
                dp[nod]+=dp[j];
        }
    }
}

int main()
{
    int i,a,b,maxim;
    freopen ("asmax.in","r",stdin);
    freopen ("asmax.out","w",stdout);
    scanf("%d", &N);
    for(i=1;i<=N;++i)
        scanf("%d", &v[i]);
    for(i=1;i<N;++i)
    {
        scanf("%d%d", &a,&b);
        fr[b]=true;
        L[a].push_back(b);
        L[b].push_back(a);
    }

    for(i=1;i<=N;++i)
        if(!fr[i])
            Dfs(i);

    maxim=dp[1];
    for(i=2;i<=N;++i)
        maxim=max(maxim,dp[i]);
    printf("%d\n", maxim);
    return 0;
}