Pagini recente » Cod sursa (job #1544368) | Cod sursa (job #1184544) | Cod sursa (job #2895500) | Cod sursa (job #248838) | Cod sursa (job #1800056)
#include <stdio.h>
#define lim 16005
#define inf 2000000000
int v[lim],viz[lim],vecin[lim],first[lim],next[lim],k,sol=-inf;
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];
viz[nod]=1;
while(p!=0){
if(viz[vecin[p]]==0)
v[nod]+=max(0,dfs(vecin[p]));
p=next[p];
}
return v[nod];
}
int main(){
FILE *fin,*fout;
fin=fopen("asmax.in","r");
fout=fopen("asmax.out","w");
int i,x,y,n;
fscanf(fin,"%d",&n);
for(i=1;i<=n;i++)
fscanf(fin,"%d",&v[i]);
for(i=1;i<n;i++){
fscanf(fin,"%d%d",&x,&y);
adauga(x,y);
adauga(y,x);
}
for(i=1;i<=n;i++)
sol=max(sol,v[i]);
fprintf(fout,"%d",sol);
fclose(fin);
fclose(fout);
return 0;
}