Pagini recente » Cod sursa (job #677763) | Cod sursa (job #2555532) | Cod sursa (job #3218977) | Cod sursa (job #2639318) | Cod sursa (job #32652)
Cod sursa(job #32652)
#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;}