Cod sursa(job #39369)

Utilizator razvi9Jurca Razvan razvi9 Data 26 martie 2007 17:51:21
Problema Cerere Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.6 kb
#include<stdio.h>
struct {int x,y;}a[100000];
int n,nr[100001],s[100001];
void DF(int vf)
{s[++s[0]]=vf;
 if(nr[vf]!=0)
  nr[vf]=nr[s[s[0]-nr[vf]]]+1;
 for(int i=1;i<=n;i++)
  if(a[i].x==vf) DF(a[i].y);
 s[0]--;}
int main()
{freopen("cerere.in","r",stdin);
 freopen("cerere.out","w",stdout);
 char buf[1000000];
 setvbuf(stdin,buf,_IOFBF,1000000);
 scanf("%d",&n);
 int i;
 for(i=1;i<=n;i++) scanf("%d",&nr[i]);
 for(i=1;i<n;i++){ scanf("%d %d",&a[i].x,&a[i].y);s[a[i].y]=1;}
 for(i=1;i<=n;i++) if(!s[i]) break;
 DF(i);
 for(i=1;i<=n;i++) printf("%d ",nr[i]);
 fclose(stdout);
 return 0;}