Pagini recente » Cod sursa (job #2952059) | Cod sursa (job #3247001) | Cod sursa (job #2642640) | Cod sursa (job #2268162) | Cod sursa (job #395085)
Cod sursa(job #395085)
#include <stdio.h>
#include <vector>
#define Nmax 250005
#define Mmax 300005
using namespace std;
vector <int> A[Nmax], B[Nmax], C[Nmax];
int n, m, p, q, x, niv, nod;
int viz[Nmax], S[Nmax], SOL[Mmax];
int j;
FILE * f = fopen ("stramosi.in", "r");
FILE * g = fopen ("stramosi.out", "w");
void DFS (int niv, int nod){
int i;
S [niv] = nod;
viz[nod] = 1;
/*for (i = 0 ; i < (int)A[nod].size() ; i++)
if (viz[ A[nod][i] ] != 1){
for (j = 0 ; j < (int)B[nod].size() ; j++)
if (B[nod][j] < niv)
SOL [ C[nod][j] ] = S[niv - B[nod][j]];
DFS (niv + 1, A[nod][i]);
}*/
for (j = 0 ; j < (int)B[nod].size() ; j++)
if (B[nod][j] < niv)
SOL [ C[nod][j] ] = S[niv - B[nod][j]];
else SOL [ C[nod][j] ] = 0;
for (i = 0 ; i < (int)A[nod].size() ; i++)
if ( viz[ A[nod][i] ] != 1)DFS (niv + 1, A[nod][i]);
}
int main (){
fscanf (f, "%d %d", &n, &m);
for (i = 1 ; i <= n ; i++){
fscanf (f, "%d", &x);
A[x].push_back(i);
}
for (i = 1 ; i <= m ; i++){
fscanf (f, "%d %d", &q, &p);
B[q].push_back(p);
C[q].push_back(i);
}
DFS(1, 0);
for (i = 1 ; i <= m ; i++)
fprintf (g, "%d\n", SOL [i]);
fclose(f);
fclose(g);
return 0;
}