Pagini recente » Cod sursa (job #2873501) | Borderou de evaluare (job #532600) | Cod sursa (job #560597) | Borderou de evaluare (job #1034308) | Cod sursa (job #3273626)
#include <fstream>
#include <bitset>
#include <vector>
using namespace std;
const int NMAX = 16002;
const int INF = 21e8;
ifstream cin("asmax.in");
ofstream cout("asmax.out");
bitset <NMAX> f;
int val[NMAX];
int dp[NMAX];
vector <vector <int>> v;
int ans = -INF;
void dfs(int start) {
f[start] = 1;
dp[start] = val[start];
for(auto nod : v[start]) {
if(f[nod])
continue;
dfs(nod);
if(dp[nod] > 0) ///DOAR dc ne ajuta fiul
dp[start] += dp[nod];
}
ans = max(ans, dp[start]);
}
int main()
{
int n, a, b;
cin >> n;
v.resize(n + 1);
for(int i = 1; i <= n; i++) {
cin >> val[i];
}
for(int i = 1; i < n; i++) {
cin >> a >> b;
v[a].push_back(b);
v[b].push_back(a);
}
dfs(1);
cout << ans;
return 0;
}