Pagini recente » Cod sursa (job #124310) | Cod sursa (job #607300) | Cod sursa (job #1737389) | Cod sursa (job #1440542) | Cod sursa (job #1572918)
#include <cstdio>
#include <vector>
using namespace std;
const int nmx = 16002;
int n,cost[nmx],dp[nmx],maxim = -0x3f3f3f3f;
vector <int> g[nmx];
void input() {
scanf("%d", &n);
for(int i = 1; i <= n; ++i)
scanf("%d", &cost[i]);
int nod1,nod2;
for(int i = 1; i < n; ++i) {
scanf("%d %d", &nod1, &nod2);
g[nod1].push_back(nod2);
g[nod2].push_back(nod1);
}
}
int dfs(const int nod, const int parinte) {
dp[nod] = cost[nod];
for(vector<int>::iterator it = g[nod].begin(); it != g[nod].end(); ++it)
if(*it != parinte) {
dfs(*it,nod);
if(dp[*it] > 0)
dp[nod] += dp[*it];
}
maxim = maxim > dp[nod] ? maxim : dp[nod];
}
int main() {
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
input();
dfs(1,0);
printf("%d\n", maxim);
return 0;
}