Pagini recente » Cod sursa (job #2822010) | Cod sursa (job #1199128) | Cod sursa (job #1744237) | Cod sursa (job #2419202) | Cod sursa (job #186165)
Cod sursa(job #186165)
#pragma option -Wall -02
#include <stdio.h>
#include <stdlib.h>
#define N 16010
#define INF 30000
int n,rez=-INF;
int *cine[N],cost[N],vizitat[N],cati[N];
void scan(){
int i,a,b;
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;++i)
scanf("%d",&cost[i]);
for (i=1;i<n;++i){
scanf("%d%d",&a,&b);
++cati[a];
++cati[b];
}
fclose(stdin);
for (i=1;i<=n;++i){
cine[i]=(int*)malloc(cati[i]*sizeof(int)+4);
cati[i]=0;
}
freopen("asmax.in","r",stdin);
scanf("%d",&n);
for (i=1;i<=n;++i)
scanf("%d",&cost[i]);
for (i=1;i<n;++i){
scanf("%d%d",&a,&b);
++cati[a];
++cati[b];
cine[a][cati[a]]=b;
cine[b][cati[b]]=a;
}
}
void dfs(int x){
int i;
vizitat[x]=1;
for (i=1;i<=cati[x];++i){
if (!vizitat[cine[x][i]]){
dfs(cine[x][i]);
if (cost[cine[x][i]]>0)
cost[x]+=cost[cine[x][i]];
}
}
if (cost[x]>rez)
rez=cost[x];
}
void print(){
dfs(1);
printf("%d\n",rez);
fclose(stdin);
fclose(stdout);
exit(0);
}
int main(){
scan();
print();
}