Cod sursa(job #159655)

Utilizator rethosPaicu Alexandru rethos Data 14 martie 2008 12:06:34
Problema Cerere Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.6 kb
#include <stdio.h>
#define NM 100001
long t[NM],v[NM],x[NM],n;
long det(long k)
{long s;
 if(v[k]!=-1) return v[k];
 s=k;
 while(x[k]>0)
   {s=t[s];
    x[k]--;
   }
 v[s]=det(s);
 return v[s]+1;
}
int main()
{long i,z,y;
 freopen("cerere.in","r",stdin);
 freopen("cerere.out","w",stdout);
 scanf("%ld",&n);
 for (i=1;i<=n;i++) v[i]=-1;
 for (i=1;i<=n;i++) scanf("%ld",&x[i]);
 for (i=1;i<n;i++)
    {scanf("%ld %ld",&y,&z);
     t[z]=y;
    }
 for (i=1;i<=n;i++) if(x[i]==0) v[i]=0;
 for (i=1;i<=n;i++) if(v[i]==-1) v[i]=det(i);
 for (i=1;i<=n;i++) printf("%ld ",v[i]);
 return 0;
}