Cod sursa(job #277624)

Utilizator mircea_infoSuciu Mircea-Gabriel mircea_info Data 11 martie 2009 20:13:02
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <cstdio>

using namespace std;

struct nod {int inf; nod *urm;} *arb[16001];
int n,val[16001],tata[16001],viz[16001];
int rad,smax,nr;

int max(int x, int y)
{
    return x>y?x:y;
}

void baga(int x, int y)
{
    nod *q=new nod;
    q->inf=y;
    q->urm=arb[x];
    arb[x]=q;
    q=new nod;
    q->inf=x;
    q->urm=arb[y];
    arb[y]=q;
}

int dfs(int x)
{
    int s=val[x];
    viz[x]=1;
    for(nod *i=arb[x];i;i=i->urm)
        if(!viz[i->inf])
        {
            nr=dfs(i->inf);
            if(nr>0)
                s+=nr;
        }
    smax=max(s,smax);
    return s;
}

int main()
{
    freopen("asmax.in","r",stdin);
    freopen("asmax.out","w",stdout);
    scanf("%d\n",&n);
    for(int i=1;i<=n;i++)
        scanf("%d\n",&val[i]);
    int x,y;
    for(int i=1;i<n;i++)
    {
        scanf("%d%d",&x,&y);
        baga(x,y);
        tata[y]=x;
    }
    for(int i=1;i<=n;i++)
        if(tata[i]==0)
        {
            rad=i;
            break;
        }
    smax=-999999999;
    dfs(rad);
    printf("%d\n",smax);
    return 0;
}