Pagini recente » Cod sursa (job #1599316) | Cod sursa (job #3260989) | Cod sursa (job #340850) | Cod sursa (job #173538) | Cod sursa (job #1659730)
#include <cstdio>
#define MAXN 16000
int con=1;
int next[MAXN*2],v[MAXN*2],ind[MAXN+1],d[MAXN+1],vf[MAXN+1],cost[MAXN+1];
inline void add(int x,int y){
next[con]=ind[x];
v[con]=y;
ind[x]=con;
con++;
}
void DFS(int nod){
int poz;
vf[nod]=1;
poz=ind[nod];
d[nod]=cost[nod];
while(poz){
if(vf[v[poz]]==0){
DFS(v[poz]);
if(d[v[poz]]>=0)
d[nod]+=d[v[poz]];
}
poz=next[poz];
}
}
int main(){
FILE*fi,*fout;
int i,n,max,x,y;
fi=fopen("asmax.in" ,"r");
fout=fopen("asmax.out" ,"w");
fscanf(fi,"%d" ,&n);
for(i=1;i<=n;i++)
fscanf(fi,"%d" ,&cost[i]);
for(i=1;i<n;i++){
fscanf(fi,"%d%d" ,&x,&y);
add(x,y);
add(y,x);
}
DFS(1);
max=0;
for(i=1;i<=n;i++){
if(max<d[i])
max=d[i];
}
fprintf(fout,"%d" ,max);
fclose(fi);
fclose(fout);
return 0;
}