Cod sursa(job #2017793)

Utilizator NToniBoSSNicolae Tonitza NToniBoSS Data 2 septembrie 2017 15:44:42
Problema Asmax Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <stdio.h>
#include <stdlib.h>
#define INF 20000000
int nr,v[16001],lista[16001],nod[32001],next[32001],rez[16001],f[16001];
void add(int x,int y)
{
    nr++;
    next[nr]=lista[x];
    nod[nr]=y;
    lista[x]=nr;
}
void dfs(int x)
{
    int z;
    rez[x]=v[x];
    f[x]=1;
    z=lista[x];
    while(z)
    {
        if(!f[nod[z]])
        {
            dfs(nod[z]);
            if(rez[nod[z]]>0)
                rez[x]+=rez[nod[z]];
        }
        z=next[z];
    }
}
int main()
{
    int n,i,x,y,max;
    freopen("asmax.in","r",stdin);
    freopen("asmax.out","w",stdout);
    scanf("%d",&n);
    for(i=1; i<=n; i++)
    {
        scanf("%d",&v[i]);
        rez[i]=-INF;
    }
    for(i=1; i<n; i++)
    {
        scanf("%d%d",&x,&y);
        add(x,y);
        add(y,x);
    }
    dfs(1);
    max=-INF;
    for(i=1; i<=n; i++)
        if(rez[i]>max)
            max=rez[i];
    printf("%d\n",max);

    return 0;
}