Pagini recente » Cod sursa (job #658044) | Cod sursa (job #1271218) | Cod sursa (job #2496731) | Cod sursa (job #16539) | Cod sursa (job #3157864)
#include<iostream>
#include<vector>
#define pb push_back
using namespace std;
const int NMAX = 16e3 + 1;
const int MINF = -1e9;
vector<int> dp(NMAX,MINF);
vector<int> vecini[NMAX];
vector<int> v(NMAX);
vector<bool> in(NMAX);
//dp[i] = suma maxima a unui subarbore care sa il contina pe i
int dinamica(int nod)
{
in[nod] = 1;
dp[nod] = v[nod];
for(auto it : vecini[nod])
{
if(in[it])
continue;
dp[nod] += max(dinamica(it),0);
}
in[nod] = 0;
return dp[nod];
}
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
int n,a,b; cin >> n;
for(int i = 1; i <= n ; i++) cin >> v[i];
for(int i = 1 ; i < n ; i++)
{
cin >> a >> b;
vecini[a].pb(b);
vecini[b].pb(a);
}
int rez = dinamica(1);
for(int i = 1; i <= n ; i++) rez = max(rez,dp[i]);
cout << rez;
}