Cod sursa(job #2825601)

Utilizator bianca_voicuBianca Voicu bianca_voicu Data 4 ianuarie 2022 21:41:19
Problema Asmax Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

vector<vector<int>> adjacentList;
vector<int> costs;
vector<int> visited;


int dfsAsmax(int node, int &maxi, vector<int> &visited) {
    int s = costs[node];
    visited[node] = 1;

    for (int i = 0; i < adjacentList[node].size(); ++i) {
        if (!visited[adjacentList[node][i]]) {
            int suma = dfsAsmax(adjacentList[node][i], maxi, visited);
            if (s + suma > s)
                s += suma;
        }
    }

    if (s > maxi)
        maxi = s;

    return s;
}

int main() {
    int n, x, y, maxi = 0, answer;
    f >> n;

    adjacentList.resize(n + 1);
    costs.resize(n + 1);
    visited.resize(n + 1, 0);

    for (int i = 1; i <= n; ++i)
        f >> costs[i];

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

    answer = dfsAsmax(1, maxi, visited);
    g << answer;

    f.close();
    g.close();
    return 0;
}