Pagini recente » Cod sursa (job #3125699) | Cod sursa (job #3169885) | Cod sursa (job #3170310) | Cod sursa (job #2598443) | Cod sursa (job #2603035)
#include <bits/stdc++.h>
std::ifstream fin ("asmax.in");
std::ofstream fout ("asmax.out");
int val[16005], dp[16005];
bool viz[16005];
std::vector < int > M[160005];
void DFS (int node){
int next, i;
dp[node] = val[node];
viz[node] = 1;
for (i=0; i<M[node].size(); i++){
next = M[node][i];
if (viz[next] == 0){
DFS(next);
if (dp[next] > 0)
dp[node] += dp[next];
}
}
}
int main()
{
int n, i, a, b;
fin >> n;
for (i=0; i<n; i++)
fin >> val[i];
for (i=0; i<n-1; i++){
fin >> a >> b;
a --; b --;
M[a].push_back (b);
M[b].push_back (a);
}
DFS (0);
int max = INT_MIN;
for (i=0; i<n; i++)
max = std::max (max, dp[i]);
fout << max << '\n';
return 0;
}