Pagini recente » Cod sursa (job #2178259) | Cod sursa (job #384534) | Cod sursa (job #1826569) | Cod sursa (job #1533217) | Cod sursa (job #1054224)
#include <cstdio>
using namespace std;
int p[18][100001],c[100001],r[100001],i,j,n,x,y;
void rezolva(int poz)
{
int k,l;
if(r[poz]==0){
k=poz;j=0;l=c[poz];
while(l){if(l%2){k=p[j][k];}j++;l/=2;}
rezolva(k);r[poz]=r[k]+1;
}
}
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%ld",&n);
for(i=1;i<=n;i++){scanf("%ld",&c[i]);if(c[i]==0){r[i]=1;}}
for(i=1;i<=n;i++){scanf("%ld%ld",&x,&y);p[0][y]=x;}
for(j=1;j<=17;j++){
for(i=1;i<=n;i++){
p[j][i]=p[j-1][p[j-1][i]];
}
}
for(i=1;i<=n;i++){rezolva(i);printf("%ld ",r[i]-1);}
return 0;
}