Pagini recente » Cod sursa (job #163602) | Cod sursa (job #1699223) | Cod sursa (job #1437414) | Cod sursa (job #3156629) | Cod sursa (job #1152290)
#include <cstdio>
using namespace std;
const int MININT = -999999999, Nmax = 32002;
int n,m,i,j,s,nr,max=MININT;
int v[Nmax/2];
int lst[Nmax];
int urm[Nmax];
int val[Nmax/2];
bool viz[Nmax/2];
int sum[Nmax/2];
inline void ad(int x,int y){
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];
if(sum[i]>max)
max=sum[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;
}