Cod sursa(job #2104418)

Utilizator bori2000Fazakas Borbala bori2000 Data 11 ianuarie 2018 17:22:19
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <iostream>
#include <fstream>
#include <list>

using namespace std;

struct elem
{
    int ertek;
    int mx;
    bool volt;
    list<int> kov;
};
elem p[16001];

int maxered=0;

void melysegi(int akt)
{
    p[akt].volt=true;
    p[akt].mx=p[akt].ertek;
    if(!p[akt].kov.empty())
    {
        for(list<int>::iterator it=p[akt].kov.begin(); it!=p[akt].kov.end(); it++)
        {
            if(!p[*it].volt)
            {
                melysegi(*it);
                if(p[*it].mx>0) p[akt].mx+=p[*it].mx;
            }
        }
    }
    if(p[akt].mx>maxered) maxered=p[akt].mx;
}

int main()
{
    ifstream f("asmax.in");
    ofstream g("asmax.out");

    int n;
    f>>n;
    int pozdb, maxim;
    pozdb=0;
    maxim=-1001;


    for(int i=1; i<=n; i++)
    {
        f>>p[i].ertek;
        if(p[i].ertek>0) pozdb++;
        if(p[i].ertek>maxim) maxim=p[i].ertek;
        p[i].volt=false;
    }
    if(pozdb<2) g<<maxim<<endl;
    else
    {
        int x, y;
        for(int i=1; i<=n-1; i++)
        {
            f>>x>>y;
            p[x].kov.push_back(y);
            p[y].kov.push_back(x);
        }
        melysegi(1);
        g<<maxered<<endl;
    }


    return 0;
}