Pagini recente » Cod sursa (job #551860) | Cod sursa (job #1076663)
#include<cstdio>
using namespace std;
int v1[100001],v2[100001],v3[100001],v4[100001];
int meow(int x,int i){
if (i==0) return x;
return meow(v2[x],i-1);
}
int ala_baba(int x){
if (v3[x]==0) return 1;
if (v4[x]!=0) return v4[x];
return 1+ala_baba(v3[x]);
}
int main(){
freopen ("cerere.in","r",stdin);
freopen ("cerere.out","w",stdout);
int n,i,a,b;
scanf ("%d",&n);
for(i=1;i<=n;i++)
scanf ("%d",&v1[i]);
for(i=1;i<n;i++){
scanf ("%d%d",&a,&b);
v2[b]=a;
}
for(i=1;i<=n;i++){
if (v1[i]==0) v3[i]=0;
else v3[i]=meow(i,v1[i]);
}
for(i=1;i<=n;i++){
if (v3[i]==0) v4[i]=1;
v4[i]=ala_baba(i);
}
for(i=1;i<=n;i++)
printf ("%d ",v4[i]-1);
return 0;
}