Pagini recente » Cod sursa (job #1739974) | Cod sursa (job #1952589) | Monitorul de evaluare | Cod sursa (job #1089546) | Cod sursa (job #1144856)
#include <cstdio>
using namespace std;
int n,m,i,j,s,nr=0,max=0;
int v[16001];
int lst[32002];
int urm[32002];
int val[16001];
bool viz[16001];
int sum[16001];
void ad(int x,int y)
{
nr++;
urm[nr]=v[x];
v[x]=nr;
lst[nr]=y;
}
void dfs(int i)
{
int p,y;
p=v[i];
viz[i]=1;
while(p!=0 && s>=0)
{
y=lst[p];
if(viz[y]==0)
{
dfs(y);
if(sum[y]>0)
sum[i]=sum[i]+sum[y];
}
p=urm[p];
}
}
int main()
{
FILE *in,*out;
in=fopen("asmax.in","r");
out=fopen("asmax.out","w");
int x,y;
fscanf(in,"%d",&n);
for(i=1;i<=n;i++)
{
fscanf(in,"%d",&val[i]);
sum[i]=val[i];
}
for(i=1;i<n;i++)
{
fscanf(in,"%d%d",&x,&y);
ad(x,y);
ad(y,x);
}
dfs(1);
for(i=1;i<=n;i++)
{
if(sum[i]>max)
max=sum[i];
}
fprintf(out,"%d ",max);
return 0;
}