Cod sursa(job #1716119)

Utilizator preda.andreiPreda Andrei preda.andrei Data 11 iunie 2016 23:27:55
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

#define NMAX 16000

vector<int> ad[NMAX + 1];
vector<int> v(NMAX + 1);
vector<int> sumeMaxime(NMAX + 1);
vector<bool> vizitat(NMAX + 1);

int sumaMaxima(int nod);

int main()
{
    ifstream fin("asmax.in");
    ofstream fout("asmax.out");

    int n;
    fin >> n;

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

    for(int i = 1; i < n; ++i){
        int x, y;
        fin >> x >> y;
        ad[x].push_back(y);
        ad[y].push_back(x);
    }

    int smax = sumaMaxima(1);
    for(int i = 1; i <= n; ++i)
        if(sumeMaxime[i] > smax)
            smax = sumeMaxime[i];

    fout << smax << "\n";
    return 0;
}

int sumaMaxima(int nod){
    int suma = v[nod];
    vizitat[nod] = true;

    for(int i = 0; i < ad[nod].size(); ++i){
        if(!vizitat[ad[nod][i]]){
            int s = sumaMaxima(ad[nod][i]);
            if(s > 0)
                suma += s;
        }
    }

    sumeMaxime[nod] = suma;
    return suma;
}