Pagini recente » Cod sursa (job #1129292) | Cod sursa (job #2563772) | Cod sursa (job #712168) | Cod sursa (job #865095) | Cod sursa (job #324430)
Cod sursa(job #324430)
#include<iostream>
using namespace std;
int main()
{
int n,m;
FILE *in = fopen("stramosi.in", "r");
FILE *out = fopen("stramosi.out", "w");
fscanf(in,"%d %d",&n,&m);
//int mat[100][10];
int ** mat = (int**)malloc( (n+1)*sizeof(int *) );
for(int i = 0; i<=n ; i++) {
mat[i] = (int *) malloc( 8*sizeof(int));
for(int j = 0 ; j< 8; j++) {
mat[i][j] = 0;
}
}
for(int i=1;i<=n;i++){
int k;
fscanf(in,"%d",&k);
mat[i][0] = k;
mat[0][i] = 0;
}
for(int i=1;i<8;i++){
for(int j = 1; j <= n; j++) {
mat[j][i] = mat[mat[j][i-1]][i-1];
/*if(p) {
mat[q][i] = p;
} else
mat[q][i]=0;
*/
}
}
for( int i = 1; i<= m; i++) {
int p;
int q;
fscanf(in,"%d %d",&q,&p);
//cout<<q<<" "<<p<<" ";
while( p > 0 && q > 0) {
for(int j = 7; j>=0 && p > 0; j--) {
//cout<<q<<" "<<p<<" "<<j<<"| ";
int k = 1<<j;
if( k <= p) {
p -= k;
q = mat[q][j];
}
}
}
//cout<<endl;
//if( q != 0 && p==0 )
fprintf(out,"%u\n",q);
//else fprintf(out,"0\n");
}
/* for(int i = 0; i<=n ; i++) {
for(int j = 0 ; j< 8; j++) {
cout<<"\t"<<mat[i][j]<<" ";
}
cout<<endl;
}*/
fclose(in);
fclose(out);
return 0;
}