Cod sursa(job #2030628)

Utilizator SenibelanMales Sebastian Senibelan Data 1 octombrie 2017 21:20:15
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream in("asmax.in");
ofstream out("asmax.out");

const int NMAX = 16005;
int N;
int V[NMAX];
int sol = NMAX * -1000;
vector <int> E[NMAX];

void Read(){
    in >> N;
    for(int i = 1; i <= N; ++i)
        in >> V[i];
    for(int i = 1; i <= N - 1; ++i){
        int a, b;
        in >> a >> b;
        E[a].push_back(b);
        E[b].push_back(a);
    }
}

int Summax(int node, int parent){
    int rez;
    rez = V[node];
    for(int i = 0; i < E[node].size(); ++i){
        int neighbour = E[node][i];
        if(neighbour != parent){
            int outcome = Summax(neighbour, node);
            if(outcome > 0)
                rez += outcome;
        }
    }
    sol = max(sol, rez);
    return rez;
}



int main(){
    Read();
    Summax(1, 0);
    out << sol << "\n";
  return 0;
}