Pagini recente » Cod sursa (job #2766348) | Cod sursa (job #2512737) | Cod sursa (job #1152228) | Cod sursa (job #2685077) | Cod sursa (job #721048)
Cod sursa(job #721048)
#include <fstream>
#include <vector>
using namespace std;
ifstream in ("asmax.in");
ofstream out ("asmax.out");
int n,v[16005],best = -(1<<30);
bool marcat[16005];
vector <int > a[16005];
void dfs (int nod) {
int s = 0;
for (size_t i = 0; i < a[nod].size(); ++i) {
if (a[nod][i] <= n && !marcat[a[nod][i]]) {
marcat[a[nod][i]] = true;
dfs(a[nod][i]);
if (v[a[nod][i]] > 0) s += v[a[nod][i]];
}
}
v[nod] += s;
if (best < v[nod]) best = v[nod];
}
int main () {
in >> n;
for (int i = 1; i <= n; ++i) {
in >> v[i];
}
for (int i = 1,x,y; i < n; ++i) {
in >> x >> y;
a[x].push_back(y);
a[y].push_back(x);
}
marcat[1] = true;
dfs (1);
out << best << '\n';
return 0;
}