Pagini recente » Cod sursa (job #104031) | Cod sursa (job #2790253) | Cod sursa (job #2865890) | Cod sursa (job #1768753) | Cod sursa (job #197280)
Cod sursa(job #197280)
#include <stdio.h>
#include <string.h>
#define QMAX 300005
#define NMAX 250005
int M, N; // nr de cereri si nr de noduri
int G[NMAX][100]; // listele de adiacenta pentru graf
int Deg[NMAX];
typedef struct cerere{
int nrs, nrc;
};
// Q[a][k] = b => a k-a cerere pentru nodul a este privitoare la stramosul al 'b'-lea.
cerere Q[NMAX][100];
int nrq[NMAX];
int A[QMAX]; // rapunsurile la cereri
int St[NMAX], cst = 0, viz[NMAX];
void DFS(int vf){
int i;
St[cst++] = vf, viz[vf] = 1;
for( i =0; i< nrq[vf]; i++)
A[ Q[vf][i].nrc] = St[cst - Q[vf][i].nrs-1];
for(i=0; i< Deg[vf]; i++)
if(!viz [ G[vf][i]]) DFS( G[vf][i]);
--cst;
}
int main(void)
{
int i , t , f;
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
scanf("%d %d", &N, &M);
for( i = 0; i< N; i++){
scanf("%d", &t);
G[t][ Deg[t]++ ] = i+1;
}
for( i = 0; i < M; i++){
scanf("%d %d ", &t,&f);
Q [t][ nrq[t] ].nrs = f;
Q [t][ nrq[t]++ ].nrc = i;
}
//DFS(0);
for(i =0; i< M; i++) printf("%d\n", A[i]);
return 0;
}