Pagini recente » Cod sursa (job #912480) | Cod sursa (job #2891633) | Cod sursa (job #2028244) | Cod sursa (job #3153313) | Cod sursa (job #2922139)
#include <bits/stdc++.h>
#define N_MAX 16005
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
vector <int> G[N_MAX];
int c[N_MAX], dp[N_MAX];
bool vis[N_MAX];
void DFS(int node){
vis[node] = true;
dp[node] = c[node];
for (auto it : G[node])
if (!vis[it]){
DFS(it);
dp[node] += max(dp[it], 0);
}
}
int main(){
int n, a, b, i, root = 1, mx = - N_MAX * N_MAX;
fin >> n;
for (i = 1; i <= n; i++)
fin >> c[i];
for (i = 1; i < n; i++){
fin >> a >> b;
G[a].push_back(b);
G[b].push_back(a);
}
DFS(root);
for (i = 1; i <= n; i++)
mx = max(mx, dp[i]);
fout << mx << "\n";
return 0;
}