Cod sursa(job #1434457)

Utilizator RaileanuCristian Raileanu Raileanu Data 10 mai 2015 17:36:42
Problema Asmax Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I, Semestrul 2 Marime 0.9 kb
#include <fstream>
#include <list>
using namespace std;
ifstream f1("asmax.in");
ofstream f2("asmax.out");
#define MX 16005

int v[MX], n, smax[MX] ;
list<int> graf[MX];
bool sel[MX];

void DFS(int nod)
{
    int s= v[nod], s1;

    if ( sel[nod] )
        return;

    sel[nod]= true;

    for ( list<int>::iterator it= graf[nod].begin(); it != graf[nod].end(); it++ )
    {
        DFS(*it);
        s1= smax[*it];
        if ( s1 > 0 )
            s+= s1;
    }

    smax[nod] = s;

}

int main()
{
    int i, x,y;

    f1>>n;
    for (i=1; i<=n; i++)
        f1>>v[i];

    for (i=1; i<n; i++)
    {
        f1>>x>>y;
        graf[x].push_back(y);
        graf[y].push_back(x);
    }

    int sm_max= -1001* MX;
    DFS(1);

    for (i=1; i<=n; i++)
        if ( sm_max < smax[i] )
            sm_max= smax[i];

    f2<<sm_max;
    f2.close();
    return 0;
}