Pagini recente » Cod sursa (job #3200245) | Cod sursa (job #892927) | Cod sursa (job #2145420) | Cod sursa (job #1491474) | Cod sursa (job #3163216)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("asmax.in");
ofstream cout("asmax.out");
const int N = 16e3;
int val[N + 5], sum = -2e7;
vector <int> graph[N + 5];
int dfs(int nod, int tata) {
int best = val[nod];
for (auto vecin : graph[nod]) {
if (vecin == tata)
continue;
int val_crt = dfs(vecin, nod);
if (val_crt >= 0)
best += val_crt;
}
sum = max(sum, best);
return best;
}
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
cin >> val[i];
for (int i = 1; i < n; i++) {
int a, b;
cin >> a >> b;
graph[a].push_back(b);
graph[b].push_back(a);
}
dfs(1, 0);
cout << sum;
return 0;
}