Pagini recente » Borderou de evaluare (job #470894) | Cod sursa (job #462898) | Cod sursa (job #1266618) | Cod sursa (job #2282384) | Cod sursa (job #2049895)
#include<fstream>
#include<vector>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
int val[16005],dp[16005],maxim,a,b,n;
bool hz[16005];
vector<int>v[16005];
int dfs (int nod) {
dp[nod] = val[nod];
for (int i = 0; i < v[nod].size(); i ++) {
int a = v[nod][i];
if (hz[a] == 0) {
hz[a] = 1;
int x = dfs (a);
if (x > 0) {
dp[nod] += x;
}
}
}
return dp[nod];
}
int main (void) {
in >> n;
for (int i = 1; i <= n; i ++) {
in >> val[i];
}
for (int i = 1; i <= n-1; i ++) {
in >> a >> b;
v[a].push_back(b);
v[b].push_back(a);
}
hz[1] = 1;
int x = dfs(1);
for (int i = 1; i <= n; i ++) {
maxim = max (maxim, dp[i]);
}
out << maxim;
return 0;
}