Pagini recente » Cod sursa (job #1245159) | Cod sursa (job #1372632) | Cod sursa (job #1092137) | Cod sursa (job #170015) | Cod sursa (job #2259056)
#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;
}