Pagini recente » Cod sursa (job #1108526) | Cod sursa (job #1540202) | Cod sursa (job #2732419) | Cod sursa (job #2509950) | Cod sursa (job #730827)
Cod sursa(job #730827)
#include<cstdio>
#include<vector>
#include<bitset>
using namespace std;
int i,j,n,m,rez[300009],p,q,stiva[250009],nr;
struct nod
{
int p,poz;
};
vector<nod>in[250009];
vector<int> a[250009];
bitset<300000> fol;
void dfs(int i)
{
fol[i]=1;
stiva[++nr]=i;
for(int j=0;j<in[i].size();++j)
if(nr-in[i][j].p>0) rez[in[i][j].poz]=stiva[nr-in[i][j].p];
else rez[in[i][j].poz]=0;
for(int j=0;j<a[i].size();++j)
if(!fol[a[i][j]]) dfs(a[i][j]);
--nr;
}
int main()
{
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
{
int x;
scanf("%d",&x);
a[x].push_back(i);
}
for(i=1;i<=m;++i)
{
scanf("%d%d",&q,&p);
nod aux;
aux.p=p;
aux.poz=i;
in[q].push_back(aux);
}
for(i=0;i<=n;++i)
if(!fol[i]) dfs(i);
for(i=1;i<=m;++i) printf("%d\n",rez[i]);
fclose(stdin);
fclose(stdout);
return 0;
}