Pagini recente » Cod sursa (job #1245795) | Cod sursa (job #1402431) | Cod sursa (job #1968503) | Cod sursa (job #1236175) | Cod sursa (job #1305572)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>
#define nmax 250005
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int n, m, q, p;
string s;
int T[nmax], LEVEL[nmax];
void readData() {
int i, x = 0, k = 0;
fin >> n >> m;
fin.get();
getline(fin, s);
s[s.size()] = ' ';
LEVEL[0] = 0;
for (i = 0; i <= s.size(); i++)
if (isspace(s[i])) {
k++;
T[k] = x;
LEVEL[k] = LEVEL[x] + 1;
x = 0;
} else
x = x * 10 + int(s[i]) - 48;
}
int root(int nod, int s, int d) {
if (s == d)
return nod;
d++;
return root(T[nod], s, d);
}
void solve() {
int i, lp;
for (i = 1; i <= m; i++) {
fin >> q >> p;
lp = LEVEL[q] - p;
if (lp <= 0) {
fout << 0 << "\n";
continue;
}
fout << root(q, p, 0) << "\n";
}
}
int main() {
readData();
solve();
fin.close();
fout.close();
return 0;
}