Pagini recente » Cod sursa (job #805556) | Cod sursa (job #150564) | Cod sursa (job #607891) | Cod sursa (job #1530848) | Cod sursa (job #2476040)
//
// 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 = -1005;
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;
}