Pagini recente » Cod sursa (job #2391407) | Cod sursa (job #2990287) | Cod sursa (job #371803) | Borderou de evaluare (job #2912997) | Cod sursa (job #997361)
Cod sursa(job #997361)
#include <stdio.h>
#include <vector>
#define NMAX 250005
#define MMAX 300005
using namespace std;
vector<int> G[NMAX],A[NMAX];
bool viz[NMAX];
int N,M,P,Q;
void read()
{
scanf("%d %d\n",&N,&M);
int i,a;
for (i=1;i<=N;i++)
{
scanf("%d ",&a);
if (a) G[i].push_back(a);
}
}
void dfs(int p,int start)
{
A[start].push_back(p);
viz[p]=1;
int j;
for (j=0;j<G[p].size();j++)
if (!viz[G[p][j]])
dfs(G[p][j],start);
}
void clear()
{
int i;
for (i=1;i<=N;i++) viz[i]=0;
}
void pre()
{
int i;
for (i=1;i<=N;i++)
{
clear();
dfs(i,i);
}
}
void query()
{
int i;
for (i=1;i<=M;i++)
{
scanf("%d %d\n",&Q,&P);
if (A[Q][P]<=N) printf("%d\n",A[Q][P]);
else printf("0\n");
}
}
int main()
{
freopen ("stramosi.in","r",stdin);
freopen ("stramosi.out","w",stdout);
read();
pre();
query();
fclose(stdin);
fclose(stdout);
return 0;
}