Cod sursa(job #3262869)

Utilizator BucsMateMate Bucs BucsMate Data 11 decembrie 2024 20:05:46
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream input("asmax.in");
ofstream output("asmax.out");

int DFS(vector<vector<int>> &adj, vector<int> &values, vector<int> &DP, int node, vector<bool> &visited)
{
    visited[node] = true;
    int sum = values[node];
    for(int i = 0; i < adj[node].size(); i++){
        if(visited[adj[node][i]]){
            continue;
        }
        int temp;
        temp = DFS(adj, values, DP, adj[node][i], visited);
        if(temp > 0){
            sum += temp;
        }
    }
    DP[node] = sum;
    return sum;
}

int main()
{
    int N;
    input >> N;
    vector<int> values(N+1);

    for(int i = 1; i <= N; i++){
        input >> values[i];
    }

    vector<vector<int>> adj(N+1, vector<int>());

    for(int i = 0; i < N-1; i++){
        int a, b;
        input >> a >> b;
        adj[a].push_back(b);
        adj[b].push_back(a);
    }

    vector<int> DP(N+1, 0);
    vector<bool> visited(N+1, 0);

    DFS(adj, values, DP, 1, visited);

    int maxim = -(1 << 29);

    for(int i = 1; i <= N; i++){
        maxim = max(maxim, DP[i]);
    }

    output << maxim;
    return 0;
}