Cod sursa(job #2830757)

Utilizator FraNNNkieFrancesco-Gregorio Petrovici FraNNNkie Data 10 ianuarie 2022 11:14:02
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>
#include <queue>
#include <vector>
#include <climits>
using namespace std;

vector <vector <int>> adList;
vector <bool> viz;
vector <int> costs;

int dfs(int start, int &maxSum){
    int treeSum = costs[start];
    viz[start] = true;
    unsigned int sz = adList[start].size();
    for(unsigned int i = 0; i < sz; ++i){
        int neighbour = adList[start][i];
        if(!viz[neighbour]){
            int subtreeSum = dfs(neighbour, maxSum);
            if(subtreeSum > 0){
                treeSum = treeSum + subtreeSum;
            }
        }
    }
    maxSum = max(maxSum, treeSum);
    return treeSum;
}

int main() {
    ifstream f("asmax.in");
    ofstream g("asmax.out");
    int n, sumMax;
    f >> n;

    viz.resize(n + 1, false);
    costs.resize(n + 1);
    adList.resize(n + 1);
    for(int i = 1; i <= n; ++i){
        f >> costs[i];
    }
    for(int i = 1; i < n; ++i){
        int x, y;
        f >> x >> y;
        adList[x].push_back(y);
        adList[y].push_back(x);
    }
    sumMax = -INT_MAX;
    dfs(1, sumMax);
    g << sumMax;
    return 0;
}