Cod sursa(job #290162)

Utilizator flamecataCiobanu Alexandru-Catalin flamecata Data 27 martie 2009 16:26:44
Problema Asmax Scor 100
Compilator cpp Status done
Runda aa Marime 1.35 kb
#include <stdio.h>   
#include <stdlib.h>   
  
#define Inf 0x3f3f3f3f   
  
inline int max(int a, int b) { return a>b?a:b; }   
  
int *a[16001];   
int viz[16001];   
int v[16001];   
int n,sol,x,y;   
  
void dfs(int nod)   
{   
    int i;   
    viz[nod]=1;   
    for (i=1;i<=a[nod][0];++i)   
         if (!viz[a[nod][i]])   
              {   
                  dfs(a[nod][i]);   
                  if (v[a[nod][i]]>0)   
                      v[nod]+=v[a[nod][i]];   
              }   
         sol=max(sol,v[nod]);   
}                     
       
  
int main()   
{   
    int i;   
    freopen("asmax.in","r",stdin);   
    freopen("asmax.out","w",stdout);   
       
    scanf("%d\n", &n);   
    for (i=1;i<=n;++i)   
          scanf("%d", &v[i]);   
             
    for (i=1;i<=n;++i)   
    {   
        a[i]=(int *) realloc(a[i], sizeof(int));   
        a[i][0]=0;   
    }   
       
    for (i=1;i<n;++i)   
    {   
        scanf("%d %d\n", &x,&y);   
        a[x][0]++;   
        a[x]=(int *) realloc(a[x], (a[x][0]+1)*sizeof(int));   
        a[x][a[x][0]]=y;   
        a[y][0]++;   
        a[y]=(int *) realloc(a[y], (a[y][0]+1)*sizeof(int));   
        a[y][a[y][0]]=x;   
    }   
    sol=-Inf;   
    for (i=1;i<=n;++i)   
         dfs(i);   
    printf("%d", sol);   
    return 0;   
}