Cod sursa(job #1584431)

Utilizator PTAdrian64Pop-Tifrea Adrian PTAdrian64 Data 30 ianuarie 2016 09:06:28
Problema Asmax Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <cstdio>
#define nmax 16002
#include <queue>
#include <algorithm>

using namespace std;

int N,t[nmax],d[nmax],s[nmax],rez = 0;
queue <int> Q;

int main(){
  
  freopen("asmax.in","r",stdin);
  freopen("asmax.out","w",stdout);
  
  scanf("%d ",&N);
  int i,j,k;
  for(i = 1;i <= N;++i){
    scanf("%d ",&s[i]);
    rez = min(rez,s[i]);
  }
  for(i = 1;i < N;++i){
    scanf("%d %d ",&j,&k);
    t[k] = j;
    d[j]++;d[k]++;
  }

  //for(i = 1;i <= N;i++)printf("%d %d\n",t[i],d[i]);
  
  for(i = 1;i <= N;++i){
    if(d[i] == 1)Q.push(i);
    
  }

  s[0] = 0;
  while(!Q.empty()){
    i = Q.front();
    Q.pop();
    
      s[t[i]] = max(s[t[i]],s[t[i]] + s[i]);
      d[t[i]]--;
      if(d[t[i]] == 1)Q.push(t[i]);
   
    rez = max(rez,s[i]);
  }

  printf("%d\n",rez);

  return 0;
}