Cod sursa(job #197280)

Utilizator cristitalauCristian Talau cristitalau Data 3 iulie 2008 03:16:05
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#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;
}