Pagini recente » Cod sursa (job #985367) | Cod sursa (job #1539906) | Cod sursa (job #1112028) | Cod sursa (job #822910) | Cod sursa (job #1554249)
#include <bits/stdc++.h>
using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");
#define MAX 250011
int n,m;
vector<int> v[MAX];
vector<int> str[MAX];
bitset <MAX> viz;
void dfs(int nod)
{ viz[nod]=1;
for(vector<int> ::iterator ir=v[nod].begin();ir!=v[nod].end();ir++)
if(viz[*ir]==0)
{ std::vector <int> ::iterator it;
if(!str[nod].empty())
{it=str[nod].begin();
str[*ir].assign(it,str[nod].end());
}
str[*ir].push_back(nod);
dfs(*ir);
}
}
int main()
{ int x,a,b;
in>>n>>m;
for(int i=1;i<=n;i++)
{
in>>x;
v[x].push_back(i);
}
for(int i=1;i<=n;i++)
if(viz[i]==0)
dfs(i);
while(m--)
{
in>>a>>b;
int j=str[a].size()-b;
if(j>=0)out<<str[a][j]<<'\n';
else out<<0<<'\n';
//care e al b-ulea stramos al lui a
}
return 0;
}