Pagini recente » Cod sursa (job #2440534) | Cod sursa (job #1940236) | Cod sursa (job #1861388) | Cod sursa (job #261437) | Cod sursa (job #324671)
Cod sursa(job #324671)
#include<iostream>
using namespace std;
int main()
{
int n,m;
int pmax = 0;
FILE *in = fopen("stramosi.in", "r");
FILE *out = fopen("stramosi.out", "w");
fscanf(in,"%d %d",&n,&m);
//int mat[100][10];
int nn = n;
while(nn) {
++pmax;
nn = nn>>1;
}
--pmax;
//cout << pmax;
int ** mat = (int**)malloc( (n+1)*sizeof(int ) );
for(int i = 0 ; i<=n ; ++i) {
mat[i] = (int *) malloc( (pmax+1)*sizeof(int));
}
for(int i = 0; i<=pmax; ++i)
mat[0][i] = 0;
for(int ok = 1, j = 1; j <= n; ++j) {
ok =1;
fscanf(in,"%d",&mat[j][0]);
for(int i=1;ok && i<=pmax; ++i){
ok = mat[j][i] = mat[mat[j][i-1]][i-1];
}
}
//cout<<pmax;
int p,q;
for( int i = 1; i<= m; ++i) {
fscanf(in,"%d %d",&q,&p);
if(p < n) {
//k = 1<<pmax;
int j = 0;
while( p > 0) {
if(p & 1)
q = mat[q][j];
p >>= 1;
}
fprintf(out,"%u\n",q);
} else
fprintf(out,"%u\n",0);
}
fclose(in);
fclose(out);
return 0;
}