Pagini recente » Cod sursa (job #2815532) | Cod sursa (job #1323162) | Cod sursa (job #1999325) | Cod sursa (job #2836256) | Cod sursa (job #1674913)
#include <cstdio>
using namespace std;
FILE *in, *out;
const int N_max = 250002;
const int Log = 18;
int A[Log][N_max]; /* A[i][j] == AL 2 ^ i STRAMOS AL LUI j */
int N, Q;
int solve(int node, int p)
{
int i = 0;
while(p != 0)
{
if(p % 2 == 1) node = A[i][node];
p = p / 2;
i++;
}
return node;
}
int main()
{
in = fopen("stramosi.in", "r");
out = fopen("stramosi.out", "w");
int i, j, node, p;
fscanf(in, "%d %d", &N, &Q);
for(i = 1; i <= N; i++) fscanf(in, "%d", &A[0][i]);
for(i = 1; (1 << i) <= N; i++)
for(j = 1; j <= N; j++)
/* RECURENTA */
if(A[i - 1][j]) A[i][j] = A[i - 1][ A[i - 1][j] ];
for(i = 1; i <= Q; i++)
{
fscanf(in, "%d %d", &node, &p);
fprintf(out, "%d\n", solve(node, p));
}
return 0;
}