Cod sursa(job #2538850)

Utilizator mirceatlxhaha haha mirceatlx Data 5 februarie 2020 11:13:12
Problema Asmax Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#define NMAX 16005
using namespace std;

ifstream fin("asmax.in");
ofstream fout("asmax.out");

vector <int> arb[NMAX];
int val[NMAX], N, dp[NMAX];

void DFS(int node, int dad)
{
    if(arb[node].size() == 0){
        dp[node] = val[node];
        return;
    }
    for(int i = 0; i < arb[node].size(); i++){
        if(arb[node][i] != dad)
            DFS(arb[node][i],node);
        if(dp[arb[node][i]] > 0 && arb[node][i] != dad){
            dp[node] += dp[arb[node][i]];
        }
        //dp[node] = max(dp[node],dp[arb[node][i]] + val[node]);
    }
    dp[node] += val[node];
}

int main()
{
    int x, y, ans = 0;
    fin >> N;
    for(int i = 1; i <= N; i++){
        fin >> val[i];
    }
    if(N == 1){
        fout << val[1] << "\n";
        return 0;
    }
    for(int i = 1; i < N; i++){
        fin >> x >> y;
        arb[x].push_back(y);
        arb[y].push_back(x);
    }
    DFS(1,0);
    for(int i = 1; i <= N; i++){
        ans = max(ans,dp[i]);
    }
    fout << ans << "\n";
    return 0;
}