Pagini recente » Cod sursa (job #1854540) | Cod sursa (job #2073684) | Cod sursa (job #2320565) | Cod sursa (job #2106784) | Cod sursa (job #124733)
Cod sursa(job #124733)
#include<stdio.h>
int t[100001],a[100001],s[100001],n,i,x,y,k[100001],j,nr,fii[100001],*b[100001];
void df(int vf,int lg)
{s[lg]=vf;
if(k[vf]) a[vf]=a[s[lg-k[vf]]]+1;
for(int i=1;i<=b[i][0];i++)
df(b[i][0],lg+1);}
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;fii[y]++;}
for(i=1;i<=n;i++) {b[i]=new int[fii[i]+2]; b[i][0]=0;}
for(i=1;i<=n;i++)
b[t[i]][++b[t[i]][0]]=i;
for(i=1;i<=n;i++) if(!t[i]) break;
df(i,1);
for(i=1;i<=n;i++)
printf("%d ",a[i]);
fclose(stdout);
return 0;}