Pagini recente » Cod sursa (job #732921) | Cod sursa (job #2587159) | Cod sursa (job #1354357) | Cod sursa (job #721436) | Cod sursa (job #2740204)
#include <bits/stdc++.h>
#define ll long long
#define for1 (n) for (int i = 1; i <= n; ++i)
#define for0 (n) for (int i = 0; i < n; ++i)
using namespace std;
ifstream fin ("asmax.in");
ofstream fout ("asmax.out");
const int maxN = 16 * 1e3 + 5;
int n, max_path_sum[maxN], max_sum = INT_MIN;
vector<int> edges[maxN];
bitset<16005> visited;
void dfs (int node) {
visited[node] = true;
if (edges[node].size() == 1 && node != 1) {
return;
}
for (int to: edges[node]) {
if (visited[edges[node][to]] == false) {
dfs(edges[node][to]);
if (max_path_sum[edges[node][to]] > 0) {
max_path_sum[node] += max_path_sum[edges[node][to]];
}
}
}
}
int main() {
fin.tie(0); fout.tie(0);
ios::sync_with_stdio(0);
fin >> n;
for (int i = 1; i <= n; ++i) {
fin >> max_path_sum[i];
}
for (int i = 1; i < n; ++i) {
int x, y; fin >> x >> y;
edges[x].push_back(y);
edges[y].push_back(x);
}
dfs(1);
for (int i = 1; i <= n; ++i) {
max_sum = max(max_sum, max_path_sum[i]);
}
fout << max_sum;
return 0;
}