Cod sursa(job #285641)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 22 martie 2009 20:00:51
Problema Asmax Scor 90
Compilator c Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <stdio.h>
#include <stdlib.h>

inline int max(int a, int b) { return a>b?a:b; }

int *a[16001];
int viz[16001];
int v[16001];
int n,sol=0,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;
    }
    
    for (i=1;i<=n;++i)
         dfs(i);
    printf("%d", sol);
    return 0;
}