Pagini recente » Cod sursa (job #2668525) | Cod sursa (job #1594828) | Cod sursa (job #2002485) | Cod sursa (job #73487) | Cod sursa (job #3283969)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("asmax.in");
ofstream g ("asmax.out");
const int NMAX = 16e3;
int dp[NMAX + 1];
vector<int> adj[NMAX + 1];
bool marked[NMAX + 1];
int v[NMAX + 1];
void dfs(int nod){
marked[nod] = true;
dp[nod] = v[nod]; //are minim propria valoare
for(int next : adj[nod]){
if(!marked[next]){
dfs(next);
if(dp[next] > 0)
dp[nod] += dp[next];
}
}
}
int main()
{
int n;
f >> n;
for(int i=1; i<=n; i++)
f >> v[i];
for(int i=1; i<n; i++){
int x, y;
f >> x >> y;
adj[x].push_back(y);
adj[y].push_back(x);
}
dfs(1);
int mx = -1e9;
for(int i=1; i<=n; i++)
mx = max(mx, dp[i]);
g << mx;
return 0;
}