Cod sursa(job #2476039)

Utilizator buhaidarius@gmail.comBuhai Darius [email protected] Data 17 octombrie 2019 22:13:46
Problema Asmax Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
//
//  main.cpp
//  Asmax
//
//  Created by Darius Buhai on 17/10/2019.
//  Copyright © 2019 Darius Buhai. All rights reserved.
//

#include <iostream>
#include <fstream>
#include <vector>

#define MAXN 16005

using namespace std;

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

vector<int> conn[MAXN];
int v[MAXN], dp[MAXN], n, maxi = 0;

void parc_dp(int f, int gf = -1){
    int add = 0;
    for(int i=0;i<conn[f].size();i++)
        if(conn[f][i]!=gf){ // if it's not the grandfather, than it's his child
            parc_dp(conn[f][i], f);
            if(dp[conn[f][i]]+v[f]>v[f]) add+=dp[conn[f][i]];
        }
    dp[f] = v[f]+add;
    if(dp[f]>maxi) maxi = dp[f];
}

int main() {
    fin>>n;
    for(int i=0;i<n;i++)
        fin>>v[i];
    for(int i=0;i<n-1;i++){
        int a, b;
        fin>>a>>b;
        a--;b--;
        conn[a].push_back(b);
        conn[b].push_back(a);
    }
    parc_dp(0);
    fout<<maxi;
    return 0;
}