Pagini recente » Cod sursa (job #1388937) | Cod sursa (job #1937813) | Cod sursa (job #1389606) | Cod sursa (job #1400476) | Cod sursa (job #3240461)
#include <bits/stdc++.h>
const std :: string FILENAME = "stramosi";
std :: ifstream in (FILENAME + ".in");
std :: ofstream out (FILENAME + ".out");
const int NMAX = 25e4 + 5;
int n;
int k;
int x;
int y;
int val[2 * NMAX];
int niv[NMAX];
int ans[2 * NMAX];
std :: vector <int> v[NMAX];
std :: bitset <NMAX> visited;
std :: vector <int> q[NMAX];
std :: vector <int> root;
void dfs(int nod, int depth)
{
niv[depth] = nod;
for(int i : q[nod])
{
if(val[i] < depth)
{
ans[i] = niv[depth - val[i]];
}
}
for(int i : v[nod])
{
if(visited[i] == false)
{
visited[i] = true;
dfs(i, depth + 1);
}
}
}
int main()
{
in >> n >> k;
for(int i = 1; i <= n; i ++)
{
in >> x;
if(x)
{
v[x].push_back(i);
}
else
{
root.push_back(i);
}
}
for(int i = 1; i <= k; i ++)
{
in >> x >> y;
q[x].push_back(i);
val[i] = y;
}
for(int i : root)
{
visited[i] = true;
dfs(i, 1);
}
for(int i = 1; i <= k; i ++)
{
out << ans[i] << '\n';
}
return 0;
}