Pagini recente » Cod sursa (job #2373348) | Cod sursa (job #3256841) | Cod sursa (job #2465934) | Cod sursa (job #2930431) | Cod sursa (job #1054216)
#include <cstdio>
using namespace std;
int p[18][100001],c[100001],r[100001],i,j,n,x,y;
void rezolva(int poz)
{
int k;
if(r[poz]==0){
k=poz;j=0;
while(c[poz]){if(c[poz]%2){k=p[j][k];}j++;c[poz]/=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;
}