Cod sursa(job #186165)

Utilizator toni2007Pripoae Teodor Anton toni2007 Data 26 aprilie 2008 20:03:51
Problema Asmax Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.29 kb
#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();
}