Pagini recente » Cod sursa (job #2667708) | Cod sursa (job #603771) | Cod sursa (job #1495100) | Cod sursa (job #2771796) | Cod sursa (job #3237806)
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
const int MAX_NUM = 16005;
int n, answer = INT_MIN;
vector<bool> visited(MAX_NUM, false);
vector<int> graph[MAX_NUM], v(MAX_NUM);
void dfs(int x) {
stack<int> s;
visited[x] = true;
s.push(x);
while (!s.empty()) {
int current = s.top();
s.pop();
for (int node : graph[current]) {
if (!visited[node]) {
visited[node] = true;
if (v[node] > 0) {
v[x] += v[node];
}
s.push(node);
}
}
answer = max(answer, v[x]);
}
}
int main() {
fin >> n;
for (int i = 1; i <= n; ++i) {
fin >> v[i];
}
for (int i = 0; i < n - 1; ++i) {
int a, b;
fin >> a >> b;
graph[a].push_back(b);
graph[b].push_back(a);
}
dfs(1);
fout << answer;
return 0;
}