Pagini recente » Cod sursa (job #736436) | Cod sursa (job #1723996) | Cod sursa (job #2324768) | Cod sursa (job #1561832) | Cod sursa (job #1643539)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
const int N = 16005;
int v[N];
int smax = 1 << 31;
vector < int > adj[N];
int dfs(int x, int p) {
int s = v[x];
for(auto i : adj[x]) {
if(i == p) continue;
int ssub = dfs(i, x);
if(ssub > 0) s += ssub;
}
smax = max(smax, s);
return s;
}
int main() {
int n, a, b, i;
in >> n;
for(i = 1; i <= n; i++) in >> v[i];
for(i = 1; i < n; i++) {
in >> a >> b;
adj[a].push_back(b);
adj[b].push_back(a);
}
dfs(1, 0);
out << smax << '\n';
return 0;
}