Cod sursa(job #2259056)

Utilizator DianaVelciovVelciov Diana DianaVelciov Data 12 octombrie 2018 21:51:12
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");

const int N_MAX = 16e3 + 5, minimul = -1e9;
int N, v[N_MAX], suma, dp[N_MAX];
bool use[N_MAX];
vector < int > G[N_MAX];

void dfs(int node){
    use[node] = true;
    dp[node] = max(dp[node], v[node]);
    for (int vecin : G[node]){
        if (!use[vecin]){
            dfs(vecin);
            dp[node] = max(dp[node], dp[node] + dp[vecin]);
        }
    }
}

int main(){
    in >> N;
    suma = minimul;
    for (int i = 1; i <= N; ++i)
        in >> v[i], dp[i] = -1003;
    for (int i = 1; i < N; ++i){
        int x, y; in >> x >> y;
        G[x].push_back(y);
        G[y].push_back(x);
    }
    dfs(1);
    for (int i = 1; i <= N; ++i)
        suma = max(suma, dp[i]);
    out << suma << '\n';
    return 0;
}