Pagini recente » Cod sursa (job #1612561) | Cod sursa (job #2006875) | Cod sursa (job #1443830) | Cod sursa (job #2747310) | Cod sursa (job #3323576)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
void dfs (vector<vector<int>> &adj, vector<bool> &visited,
vector<int> &values, int &max_sum, int &curr_sum, int node) {
visited[node] = true;
for (int neighbor : adj[node]) {
if (!visited[neighbor]) {
curr_sum += values[neighbor];
dfs(adj, visited, values,
max_sum, curr_sum, neighbor);
if (curr_sum > max_sum) {
max_sum = curr_sum;
}
else {
curr_sum = max_sum;
}
}
}
}
int main() {
int n, curr_sum = 0, max_sum = 0;
fin >> n;
vector<vector<int>> adj(n + 1);
vector<int> values(n + 1);
vector<bool> visited(n + 1, false);
for (int i = 1; i <= n; ++i) {
fin >> values[i];
}
for (int i = 1; i <= n; ++i) {
int x, y;
fin >> x >> y;
adj[x].push_back(y);
adj[y].push_back(x);
}
dfs(adj, visited, values, max_sum, curr_sum, 1);
fout << max_sum;
return 0;
}