Pagini recente » Cod sursa (job #2972220) | Cod sursa (job #1864737) | Cod sursa (job #1091758) | Cod sursa (job #1404031) | Cod sursa (job #3132570)
#include <fstream>
#include <vector>
using namespace std;
string file = "stramosi";
ifstream cin (file + ".in");
ofstream cout (file + ".out");
struct query{
int k, stramos;
};
const int N = 250000;
vector <int> fii[N+1],v;
vector <query> a[N+1];
int raspuns[300001];
void dfs(int x)
{
for (query niff : a[x])
{
//cout << niff.stramos << ' ' << niff.k << '\n';
if (niff.stramos == 0)
{
raspuns[niff.k] = x;
}
else if (niff.stramos <= v.size())
{
raspuns[niff.k] = v[v.size() - niff.stramos];
}
}
v.push_back(x);
for (int y : fii[x])
{
dfs(y);
}
v.pop_back();
}
int main()
{
int n,m,x,y;
cin >> n >> m;
for (int i=1; i<=n; i++)
{
cin >> x;
fii[x].push_back(i);
}
for (int i=1; i<=m; i++)
{
cin >> x >> y;
a[x].push_back({i,y});
}
for (int tata : fii[0])
dfs(tata);
for (int i=1; i<=m; i++)
{
cout << raspuns[i] << '\n';
}
return 0;
}