Pagini recente » Cod sursa (job #2823810) | Cod sursa (job #3168642) | Cod sursa (job #2190886) | Cod sursa (job #578911) | Cod sursa (job #3264939)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("asmax.in"); ofstream out("asmax.out");
int n;
vector <int> valori;
vector <vector <int>> lista;
vector <bool> viz;
int dfs(int nod, int& sum) {
viz[nod] = true;
int now = valori[nod];
for (int elm : lista[nod]) {
if (!viz[elm]) {
now += max(0, dfs(elm, sum));
}
}
sum = max(sum, now);
return now;
}
int main()
{
in >> n;
valori.resize(n + 1);
lista.resize(n + 1);
viz.resize(n + 1);
for(int i = 1; i <= n; i++)
in >> valori[i];
for(int i = 1; i <= n - 1; i++){
int x, y;
in >> x >> y;
lista[x].push_back(y);
lista[y].push_back(x);
}
int sum = -1000000;
dfs(1, sum);
out << sum << endl;
return 0;
}