Pagini recente » Cod sursa (job #2174910) | Cod sursa (job #870295) | Cod sursa (job #2153481) | Cod sursa (job #2614054) | Cod sursa (job #391407)
Cod sursa(job #391407)
#include <fstream>
#include <vector>
#include <bitset>
#define maxm 1<<19
#define maxn 300001
#define pb push_back
#define sz size
using namespace std;
ifstream fin ("stramosi.in"); // citire + scriere cu streamuri pt eficienta (cica)
ofstream fout ("stramosi.out");
int N, M, i, p, q , a;
int st [maxn];
vector <int> listv [maxn];
vector <int> listp [maxn], G [maxn];
int sol [maxn], fat [maxn];
bool viz [maxn];
void dfs (int node, int lev) {
if(node < 1 || node > N) return;
if(lev <= 0 || lev >= maxn) return;
int j;
viz [node] = true;
/*
st [lev] = node;
for (j = 0; j < listv [node].sz (); j++)
if (lev > listv [node][j])
sol [listp [node][j]] = st [lev - listv [node][j]];
*/
for (j = 0; j < G [node].sz (); j++)
if (!viz [G [node][j]])
dfs (G [node][j], lev + 1);
}
int main () {
int a;
fin >> N >> M;
for (i = 1; i <= N; i++) {
fin >> a;
fat [i] = a;
G [a].pb (i);
}
for (i = 1; i <= M; i++)
{
fin >> q >> p;
listv [q].pb (p);
listp [q].pb (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;
}