Pagini recente » Cod sursa (job #1303930) | Cod sursa (job #2451697) | Cod sursa (job #800863) | Cod sursa (job #2799408) | Cod sursa (job #3171882)
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
using VVP = vector<vector<pair<int, int>>>;
using VI = vector<int>;
using VVI = vector<VI>;
VI path, sol;
VVI arb;
VVP queries;
void DFS(int x)
{
path.push_back(x);
for(auto [k, i] : queries[x])
{
int len = path.size() - 1 - k;
if(len > 0)
sol[i] = path[len];
}
for(int y : arb[x])
DFS(y);
path.pop_back();
}
int main()
{
int n, m;
fin >> n >> m;
sol = VI(m + 1);
arb = VVI(n + 1);
queries = VVP(n + 1);
for(int i = 1, tata; i <= n; ++i)
{
fin >> tata;
arb[tata].push_back(i);
}
for(int i = 1, x, k; i <= m; ++i)
{
fin >> x >> k;
queries[x].emplace_back(k, i);
}
DFS(0);
for(int i = 1; i <= m; ++i)
fout << sol[i] << '\n';
return 0;
}