Pagini recente » Cod sursa (job #4590) | Cod sursa (job #3287958) | Cod sursa (job #1737669) | Cod sursa (job #2586445) | Cod sursa (job #469868)
Cod sursa(job #469868)
#define nmax 250005
#define mmax 300005
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
const char iname[] = "stramosi.in";
const char oname[] = "stramosi.out";
ifstream fin(iname);
ofstream fout(oname);
vector <int> A[nmax], Stramos[nmax], Query[mmax];
int i, j, x, N, M, st[nmax], viz[nmax], sol[mmax], y;
void DFS(int node, int nivel)
{
int i, j;
viz[node] = 1;
st[nivel] = node;
for(i = 0; i < Stramos[node].size(); i ++)
{
if(nivel - Stramos[node][i] >= 1)
sol[Query[node][i]] = st[nivel - Stramos[node][i]];
else
sol[Query[node][i]] = 0;
}
for(i = 0; i < A[node].size(); i ++)
if(!viz[A[node][i]])
DFS(A[node][i], nivel + 1);
}
int main()
{
fin >> N >> M;
for(i = 1; i <= N; i ++)
{
fin >> x;
A[x].push_back(i);
}
for(i = 1; i <= M; i ++)
{
fin >> x >> y;
Stramos[x].push_back(y);
Query[x].push_back(i);
}
for(i = 1; i <= N; i ++)
if(!viz[i])
DFS(i, 1);
for(i = 1; i <= M; i ++)
fout << sol[i] << "\n";
return 0;
}