Pagini recente » Cod sursa (job #1953835) | Cod sursa (job #2442490) | Cod sursa (job #1321014) | Cod sursa (job #169161) | Cod sursa (job #2756004)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
#define NMAX 16001
vector<int> val(NMAX);
int N;
vector<int> adj[NMAX];
void dfs(int node, vector<int>& visited, int& sum, int& maxsum) {
visited[node] = 1;
sum += val[node - 1];
// if (sum > maxsum) {
// maxsum = sum;
// }
for (auto neigh : adj[node]) {
if (!visited[neigh]) {
dfs(neigh, visited, sum, maxsum);
}
}
//sum -= val[node];
}
int main() {
fin >> N;
for (int i = 1; i <= N; i++) {
fin >> val[i];
}
for (int i = 1, a, b; i < N; i++) {
fin >> a >> b;
adj[a].push_back(b);
adj[b].push_back(a);
}
vector<int> visited(N + 1);
int maxsum = INT32_MIN;
for (int i = 1; i <= N; i++) {
int sum = 0;
if (!visited[i]) {
dfs(i, visited, sum, maxsum);
}
if (sum > maxsum) {
maxsum = sum;
}
}
fout << maxsum << endl;
return 0;
}