Pagini recente » Cod sursa (job #1938470) | Cod sursa (job #1941164) | Cod sursa (job #619951) | Cod sursa (job #1507178) | Cod sursa (job #1448529)
//0010
#include <cstdio>
#include <vector>
#define vi vector<int>::iterator
using namespace std;
vector<int> e[25005];
vector<int> p[25005];
void dfs(int nod, int root) {
p[nod].push_back(root);
for (int i = 0; i < p[root].size(); i++) {
p[nod].push_back(p[root][i]);
}
for (int i = 0; i < e[nod].size(); i++) {
if (e[nod][i] == root) {
continue;
}
dfs(e[nod][i], nod);
}
}
int main() {
FILE* fi = fopen("stramosi.in", "rt");
FILE* fo = fopen("stramosi.out", "wt");
int n, m;
fscanf(fi, "%d%d", &n, &m);
for (int i = 1; i <= n; i++) {
int aux;
fscanf(fi, "%d", &aux);
e[i].push_back(aux);
e[aux].push_back(i);
}
for (int i = 0; i < e[0].size(); i++) {
int aux1 = e[0][i];
for (int j = 0; j < e[aux1].size(); j++) {
int aux2 = e[aux1][j];
if (aux2 == 0) {
continue;
}
dfs(aux2, aux1);
}
}
for (int i = 0; i < m; i++) {
int a, b;
fscanf(fi, "%d%d", &a, &b);
if (b > p[a].size()) {
fprintf(fo, "0\n");
} else {
if (b == 0) {
fprintf(fo, "%d\n", a);
} else {
fprintf(fo, "%d\n", p[a][b - 1]);
}
}
}
return 0;
}