Cod sursa(job #2017789)

Utilizator NToniBoSSNicolae Tonitza NToniBoSS Data 2 septembrie 2017 15:35:31
Problema Asmax Scor 90
Compilator c Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <stdio.h>
#include <stdlib.h>
#define INF 20000000
int nr,v[16001],lista[16001],nod[16001],next[16001],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];
    z=lista[x];
    while(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);
        f[y]=1;
    }
    i=1;
    while(f[i])
        i++;
    dfs(i);
    max=-INF;
    for(i=1; i<=n; i++)
        if(rez[i]>max)
            max=rez[i];
    printf("%d\n",max);

    return 0;
}