Cod sursa(job #32652)

Utilizator razvi9Jurca Razvan razvi9 Data 18 martie 2007 11:50:46
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.54 kb
#include<stdio.h>
int t[100001],a[100001],n,i,x,y,k[100001],j,nr;
void cerere(int i,int &nr)
{if(a[i]) {nr=a[i];return;}
 if(k[i]==0){a[i]=1;nr=1;return;}
 x=i;
 while(k[i]--) x=t[x];
 cerere(x,nr);
 nr++;
 a[x]=nr;}
int main()
{freopen("cerere.in","r",stdin);
 freopen("cerere.out","w",stdout);
 scanf("%d",&n);
 for(i=1;i<=n;i++)
  scanf("%d",&k[i]);
 for(j=1;j<n;j++)
 {scanf("%d %d",&y,&x);t[x]=y;}
 for(i=1;i<=n;i++)
  if(!a[i]) cerere(i,nr=0);  
 for(i=1;i<=n;i++)
  printf("%d ",a[i]-1);
 fclose(stdout); 
 return 0;}