Pagini recente » Cod sursa (job #2657906) | Cod sursa (job #308071) | Cod sursa (job #2947054) | Cod sursa (job #2171874) | Cod sursa (job #1800045)
#include <stdio.h>
#define lim 16005
#define inf 2000000000
int v[lim],viz[lim],vecin[lim],first[lim],next[lim],k;
int max(int a,int b){
if(a>b)
return a;
else
return b;
}
void adauga(int nod,int fiu){
k++;
vecin[k]=fiu;
next[k]=first[nod];
first[nod]=k;
}
int dfs(int nod){
int p=first[nod],rasp=-inf;
viz[nod]=1;
while(p!=0){
if(viz[vecin[p]]==0)
v[nod]+=max(0,dfs(vecin[p]));
p=next[p];
}
if(v[nod]>rasp)
rasp=v[nod];
return v[nod];
}
int main(){
FILE *fin,*fout;
fin=fopen("asmax.in","r");
fout=fopen("asmax.out","w");
int i,x,y,n,maxim=-16000000;
fscanf(fin,"%d",&n);
for(i=1;i<=n;i++){
fscanf(fin,"%d",&v[i]);
if(v[i]>maxim)
maxim=v[i];
}
for(i=1;i<n;i++){
fscanf(fin,"%d%d",&x,&y);
adauga(x,y);
adauga(y,x);
}
fprintf(fout,"%d",dfs(1));
fclose(fin);
fclose(fout);
return 0;
}