Cod sursa(job #1811715)

Utilizator demetriad-dagpagDavid Demetriad demetriad-dagpag Data 21 noiembrie 2016 15:28:18
Problema Asmax Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <stdio.h>
#include <stdlib.h>
int nr,lista[16001],nod[32001],next[32001],rez[16001],v[16001],mark[16001];
void add(int x,int y)
{
    nr++;
    nod[nr]=y;
    next[nr]=lista[x];
    lista[x]=nr;
}
void dfs(int x)
{
    int k;
    k=lista[x];
    mark[x]=1;
    rez[x]=v[x];
    while(k)
    {
        if(mark[nod[k]]==0)
        {
            dfs(nod[k]);
            if(rez[nod[k]]>0)
                rez[x]+=rez[nod[k]];
        }
        k=next[k];
    }
}
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]);
    for(i=1; i<n; i++)
    {
        scanf("%d%d",&x,&y);
        add(x,y);
        add(y,x);
    }
    dfs(1);
    max=-2000000000;
    for(i=1; i<=n; i++)
        if(rez[i]>max)
            max=rez[i];
    printf("%d\n",max);

    return 0;
}