Cod sursa(job #2824748)

Utilizator Maria23Dutu Maria Maria23 Data 3 ianuarie 2022 12:13:30
Problema Asmax Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int sumMaxSubarbore(int nod, int &sumMax, vector<bool> &viz, const vector<int> &valoriNoduri, const vector<vector<int>> &listaAd){
    int sumNodCrt = valoriNoduri[nod];
    viz[nod] = true;

    for (auto vecin : listaAd[nod]){
        if (!viz[vecin]){
            int sumVecin = sumMaxSubarbore(vecin, sumMax, viz, valoriNoduri, listaAd);
            if (sumNodCrt + sumVecin > sumNodCrt){
                sumNodCrt += sumVecin;
            }
        }
    }
    sumMax = max(sumNodCrt, sumMax);

    return  sumNodCrt;
}

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

    vector<bool> viz(n + 1);
    vector<int> valoriNoduri(n + 1);
    vector<vector<int>> listaAd(n + 1, vector<int>());

    for (int i = 1; i <= n; i ++){
        int valNod;
        fin >> valNod;
        valoriNoduri[i] = valNod;
    }

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

    int sMax = -1001;
    int nodStart = 1;
    fout << sumMaxSubarbore(nodStart, sMax, viz, valoriNoduri, listaAd);

    return 0;
}