Cod sursa(job #2824775)

Utilizator monicaandreea46Girbea Monica monicaandreea46 Data 3 ianuarie 2022 15:03:13
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <bits/stdc++.h>
#include<fstream>
#include<vector>
#include<map>
#include<queue>
std::ifstream f("asmax.in");
std::ofstream g("asmax.out");
int n, m, x, y, rez, suma_maxim = -1001;
std::vector< std::vector< int> > lista;
std::vector<int> cost;
std::vector< bool> viz;

int subarbore(int nod){
    //std::cout<<"NODUL: "<<nod<<"\n";
    int suma_nod = cost[nod];
    viz[nod] = true;

    for( auto i = lista[nod].begin() ; i != lista[nod].end(); i++){
        int vecin = *i;
        if( !viz[vecin] ){
            viz[vecin] = true;
            int suma_vecin = subarbore(vecin);

            //std::cout<<"nodul: "<<nod<<"\n";
            //std::cout<<"suma vecin: "<<suma_vecin<<" suma nod: "<< suma_nod<<"\n";

            if(suma_nod + suma_vecin > suma_nod) suma_nod += suma_vecin;
            //std::cout<<"suma nod noua: "<<suma_nod<<"\n";
        }
    }

    suma_maxim = std::max(suma_nod, suma_maxim);

    return suma_nod;
}

int main() {
    f>>n;

    std::vector< int > v;

    for(auto i = 0 ; i<=n ; i++) {
        viz.push_back(false);
        lista.push_back(v);
    }

    for(int i = 0 ; i < n ; i++){
        f >> x;
        cost.push_back(x);
    }

    for(int i = 1 ; i < n ; i++){
        f >> x >> y;
            lista[x-1].push_back(y-1);
            lista[y-1].push_back(x-1);
    }

    int rez = subarbore(0);

    g<<suma_maxim;
    return 0;
}