Cod sursa(job #935437)

Utilizator rudarelLup Ionut rudarel Data 3 aprilie 2013 14:42:58
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <stdio.h>
#include <vector>
 
using namespace std;
 
#define FIN "asmax.in"
#define FOUT "asmax.out"
#define nmax 16100
 
#define FOR(i,a,b) for(i= (a); i<(b); ++i)
 
vector<int> a[nmax];
int c[nmax], v[nmax], MAX=-(1<<20), NEG;
int s[nmax], n;
 
void DF(int nod)
 {
  int i;
 
//  printf("intru in DF la %d cu costul %d\n",nod,c[nod]);
 
  v[nod]=1;
 
  FOR(i,0,a[nod].size())
   if(v[a[nod][i]]==0)
    {
     DF(a[nod][i]);
     if( s[a[nod][i]] > 0)
      s[nod] += s[a[nod][i]];
    }
 
  s[nod] += c[nod];
    
  if( s[nod] > MAX)
   MAX = s[nod];
  if( c[nod] > MAX)
   MAX = c[nod];
 
//  printf("suma la %d este %d\n",nod,s[nod]);
 }
int main()
 {
   freopen(FIN,"r",stdin);
   freopen(FOUT,"w",stdout);
 
   int i,x,y;
    
   scanf("%d\n", &n);
 
   ++n;
   FOR(i,1,n)
    scanf("%d", &c[i]);
   --n;
 
   FOR(i,1,n)
   {
     scanf("%d%d", &x,&y);
     a[x].push_back(y);
     a[y].push_back(x);
   }
 
   DF(1);
 
   printf("%d\n", MAX);
     
   return 0;
 }