Pagini recente » Cod sursa (job #818712) | Cod sursa (job #200273) | Cod sursa (job #235987) | Cod sursa (job #724299) | Cod sursa (job #1554261)
#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;
int mat[21][MAX];
/*
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,b,i,j;
in>>n>>m;
for(int i=1;i<=n;i++)
{
in>>mat[0][i];
}
for(int i=1;i<=20;i++)
for(int j=1;j<=n;j++)
mat[i][j]=mat[i-1][mat[i-1][j]];
//stramosul stramosului
while(m--)
{ int c;
in>>c>>b;
int i=0;
while(b!=0)
{
if(b%2)
c=mat[i][c];
b=b/2;
i++;
}
/*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 c
*/
out<<c<<'\n';
}
return 0;
}