Pagini recente » Cod sursa (job #1791746) | Cod sursa (job #537579) | Cod sursa (job #1336740) | Cod sursa (job #856985) | Cod sursa (job #3198624)
#include <fstream>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
const int N=100;
int v[N+1];
int mu[N+1][N+1];
int n, m;
int dp[N+1];
bool fin[N+1];
int maxx=-1001;
int dinamica(int x)
{
if(fin[x]) return dp[x];
else if (dp[x]!=0) return 0;
dp[x]=v[x];
for(int i=1; i<=mu[x][0]; i++)
{
while(mu[x][i]<=x && i<=mu[x][0]) i++;
int aux=dinamica(mu[x][i]);
if(aux>0) dp[x]+=aux;
}
fin[x]=true;
if(dp[x]>maxx) maxx=dp[x];
return dp[x];
}
int main()
{
in>>n;
m=n-1;
for(int i=1; i<=n; i++) in>>v[i];
for(int i=1; i<=m; i++)
{
int a,b;
in>>a>>b;
mu[a][++mu[a][0]]=b;
mu[b][++mu[b][0]]=a;
}
dinamica(1);
out<<maxx;
}