Pagini recente » Cod sursa (job #894164) | Cod sursa (job #2346513) | Cod sursa (job #2509727) | Cod sursa (job #722177) | Cod sursa (job #2647518)
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int n, x, y, v[16001], result = INT_MIN;
vector <int> edges[16001];
bitset <16001> reached;
int dfs(int current) {
reached[current] = 1;
int maxCurrent = v[current];
for (int edge : edges[current])
if (!reached[edge]) {
int branchCost = dfs(edge);
maxCurrent = max(maxCurrent, branchCost + maxCurrent);
result = max(result, branchCost);
}
return maxCurrent;
}
int main() {
fin >> n;
for (int i = 1; i <= n; i++)
fin >> v[i];
for (int i = 1; i < n; i++) {
fin >> x >> y;
edges[x].push_back(y);
edges[y].push_back(x);
}
result = max(result, dfs(1));
fout << result;
return 0;
}