Pagini recente » Cod sursa (job #262732) | Cod sursa (job #2628184) | Cod sursa (job #2102576) | Cod sursa (job #731859) | Cod sursa (job #424594)
Cod sursa(job #424594)
#include <cstdio>
#include <vector>
using namespace std;
#define NMAX 250050
#define MMAX 300050
#define LMAX 20
int S[NMAX], viz[NMAX], sol[MMAX], n, m, i, x, y;
vector <int> A[NMAX], list[NMAX], listp[NMAX];
void DFS(int nod, int lev) {
int i;
viz[nod] = 1, S[lev] = nod;
for (i = 0; i < list[nod].size(); i++) {
x = list[nod][i];
if (lev - x > 0)
sol[listp[nod][i]] = S[lev - x];
else
sol[listp[nod][i]] = 0;
}
for (i = 0; i < A[nod].size(); i++)
if (!viz[A[nod][i]])
DFS(A[nod][i], lev + 1);
}
int main() {
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
scanf("%d %d", &n, &m);
for (i = 1; i <= n; i++) {
scanf("%d", &x);
A[x].push_back(i);
}
for (i = 1; i <= m; i++) {
scanf("%d %d", &x, &y);
list[x].push_back(y);
listp[x].push_back(i);
}
for (i = 1; i <= n; i++)
if (!viz[i])
DFS(i, 1);
for (i = 1; i <= m; i++)
printf("%d\n", sol[i]);
return 0;
}