Cod sursa(job #2824883)

Utilizator MihaelaDanilaDanila Mihaela MihaelaDanila Data 3 ianuarie 2022 17:35:30
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

vector < vector<int> > graph;
int number_of_nodes;
vector<int> costs;

void read_graph(char* file){
    ifstream f(file);

    f >> number_of_nodes;

    costs.assign(number_of_nodes + 1, 0);
    graph.assign(number_of_nodes + 1, vector<int>());

    for(int i = 1; i <= number_of_nodes; i++){
        f >> costs[i];
    }

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

int dfs_sum(int node, int& sum, vector<int>& visited){
    int sum_current;
    sum_current = costs[node];
    visited[node] = 1;

    for(int i = 0; i < graph[node].size(); i++){
        int neighbor;

        neighbor = graph[node][i];

        if(visited[neighbor] == 0){
            int sum_neighbor;

            sum_neighbor = dfs_sum(neighbor, sum, visited);

            if(sum_current + sum_neighbor > sum_current){
                sum_current = sum_current + sum_neighbor;
            }
        }
    }

    if(sum_current > sum){
        sum = sum_current;
    }

    return sum_current;
}

int maximum_sum(){
    vector<int> visited;

    visited.assign(number_of_nodes + 1, 0);

    int sum = 0 - (1 << 5);
    int result;

    result = dfs_sum(1, sum, visited);

    return sum;
}

int main() {
    ofstream g("../asmax.out");
    read_graph("../asmax.in");
    g << maximum_sum();
    return 0;
}