Pagini recente » Cod sursa (job #1639587) | Cod sursa (job #864246) | Cod sursa (job #458403) | Cod sursa (job #1661938) | Cod sursa (job #2345049)
#include <bits/stdc++.h>
#define MAXN 16005
int N, V[MAXN], DP[MAXN], Ans;
std::vector <int> ADC[MAXN];
inline void AddEdge(int X, int Y) {
ADC[X].push_back(Y);
ADC[Y].push_back(X);
}
void DFS(int Vertex = 1, int Parent = 0) {
DP[Vertex] = V[Vertex];
for (auto Edge:ADC[Vertex])
if (Edge != Parent)
DFS(Edge, Vertex), DP[Vertex] = std::max(DP[Vertex], DP[Vertex] + DP[Edge]);
Ans = std::max(Ans, DP[Vertex]);
}
std::ifstream In ("asmax.in");
std::ofstream Out("asmax.out");
void Citire() {
In >> N;
for (int i=1; i<=N; ++i)
In >> V[i];
for (int i=1, x, y; i<N; ++i)
In >> x >> y, AddEdge(x, y);
}
void Rezolvare() {
DFS();
Out << Ans << '\n';
}
int main()
{
Citire();
Rezolvare();
return 0;
}