Cod sursa(job #974826)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 18 iulie 2013 14:22:31
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <cstdio>
#include <bitset>
#include <list>

using namespace std;

struct nod
{
    int val;
    list<int> vecini;
}v[16005];

int m[16005];
bitset<16005> viz;

void parc(int nod)
{
    viz[nod]=1;
    m[nod]=v[nod].val;

    list<int>::iterator it;
    for(it=v[nod].vecini.begin();it!=v[nod].vecini.end();it++)
        if(!viz[*it])
        {
            parc(*it);
            if(m[*it]>0)
                m[nod]+=m[*it];
        }
}

int main()
{
    freopen("asmax.in","r",stdin);
    freopen("asmax.out","w",stdout);

    int n,i,x,y;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&v[i].val);

    for(i=1;i<n;i++)
    {
        scanf("%d%d",&x,&y);
        v[x].vecini.push_back(y);
        v[y].vecini.push_back(x);
    }

    parc(1);

    int maxim=m[1];
    for(i=2;i<=n;i++)
        if(m[i]>maxim)
            maxim=m[i];
    printf("%d\n",maxim);

    return 0;
}