Pagini recente » Cod sursa (job #1432877) | Cod sursa (job #916655) | Cod sursa (job #2273902) | Cod sursa (job #285305) | Cod sursa (job #3231424)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int viz[250003], st[250003], res[300003];
vector<pair<int, int>> quiz[250003];
vector<int> a[250003];
void dfs(int curr, int k)
{
st[k] = curr;
viz[curr] = 1;
if (quiz[curr].size())
for (int i = 0; i < static_cast<int>(quiz[curr].size()); i++)
if (k <= quiz[curr][i].first)
res[quiz[curr][i].second] = 0;
else
res[quiz[curr][i].second] = st[k - quiz[curr][i].first];
for(auto& vecin : a[curr])
{
if (!viz[vecin])
{
dfs(vecin,k + 1);
}
}
}
int main()
{
int n, m;
f>>n>>m;
for (int i = 1; i <= n; i++)
{
int x;
f>>x;
if(x)
a[x].push_back(i);
}
for (int i = 1; i <= m; i++)
{
int x,y;
f>>x>>y;
quiz[x].push_back({y,i});
}
for (int i = 1; i <= n; i++)
if (!viz[i])
dfs(i,1);
for (int i = 1; i <= m; i++)
g<<res[i]<<'\n';
return 0;
}