Pagini recente » Cod sursa (job #1327510) | Cod sursa (job #2737314) | Cod sursa (job #1668581) | Cod sursa (job #2169820) | Cod sursa (job #2379905)
#include <bits/stdc++.h>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
const int NMAX = 16001;
vector<int> A[NMAX];
int N, ma;
int dp[NMAX]; /// dp[i] -> suma maxima a subarborelui cu radacina in i;
void dfs(const int& i, const int& t) {
for(const auto& vec: A[i])
if(vec != t) {
dfs(vec, i);
dp[i] = max(dp[i], dp[i] + dp[vec]);
}
ma = max(dp[i], ma);
}
int main()
{
in >> N;
for(int i = 1; i <= N; i++)
in >> dp[i];
int x, y;
for(int i = 1; i < N; i++) {
in >> x >> y;
A[x].push_back(y);
A[y].push_back(x);
}
dfs(1, 0);
out << ma << '\n';
return 0;
}