Cod sursa(job #1322232)

Utilizator cautionPopescu Teodor caution Data 19 ianuarie 2015 21:34:34
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>
#include <list>
using namespace std;

int main()
{
    ifstream in("asmax.in");
    ofstream out("asmax.out");
    long n, aux1, aux2, x1, x2;
    long *noduri, *coada, maximum;
    list<long> *lista;
    in>>n;
    noduri = new long[n+1];
    lista = new list<long>[n+1];
    coada = new long[n+1];
    for(long i=1; i<=n; ++i) in>>noduri[i];
    for(long i=1; i<n; ++i)
    {
        in>>aux1>>aux2;
        lista[aux1].push_back(aux2);
        lista[aux2].push_back(aux1);
    }
    x1=0; x2=-1;
    for(long i=1; i<=n; ++i)
    {
        if(lista[i].size()==1)
        {
            ++x2;
            coada[x2]=i;
        }
    }
    maximum=-1001;
    while(x1<=x2)
    {
        if(noduri[coada[x1]]>maximum) maximum=noduri[coada[x1]];
        if(noduri[coada[x1]]<0) noduri[coada[x1]]=0;
        if(!lista[coada[x1]].empty())
        {
            aux1=*(lista[coada[x1]].begin());
            noduri[aux1]+=noduri[coada[x1]];
            lista[aux1].remove(coada[x1]);
            if(lista[aux1].size()==1)
            {
                ++x2;
                coada[x2]=aux1;
            }
        }
        ++x1;
    }
    out<<maximum;
    in.close(); out.close();
    return 0;
}