Pagini recente » Cod sursa (job #51135) | Cod sursa (job #2711194) | Cod sursa (job #254035) | Cod sursa (job #2973688) | Cod sursa (job #2379903)
#include <bits/stdc++.h>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
const int NMAX = 16001;
struct nod {
int val;
vector<int> A;
};
nod M[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) {
dp[i] = M[i].val;
for(const auto& vec: M[i].A)
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 >> M[i].val;
int x, y;
for(int i = 1; i < N; i++) {
in >> x >> y;
M[x].A.push_back(y);
M[y].A.push_back(x);
}
dfs(1, 0);
out << ma << '\n';
return 0;
}