Cod sursa(job #393220)

Utilizator dexter_dexMutascu Adrian - Dragos dexter_dex Data 9 februarie 2010 08:44:31
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <stdio.h>
#include <vector>

#define Nmax 2505
#define Mmax 3005

using namespace std;

vector <int> A[Nmax], B[Nmax];

int n, m, p, q, x, niv, nod;
int Q[Mmax], P[Mmax], SOL[Mmax][Nmax], viz[Nmax], S[Nmax];
int i, j;


FILE * f = fopen ("stramosi.in", "r");
FILE * g = fopen ("stramosi.out", "w");


void DFS (int niv, int nod){
	viz [nod] = 1;
	S [niv] = nod;
	for (i = 0 ; i < A[nod].size() ; i++)
		if (viz[ A[nod][i] ] != 1){
			
			DFS (niv + 1, A[nod][i]);
			for (j = 0 ; j < B[nod].size() ; j++)
				if (B[nod][j] < niv)
					SOL [nod] [ B[nod][j] ] = S[niv - B[nod][j]];
			
		}
}


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);
		Q[i]=q;
		P[i]=p;
		B[q].push_back(p);		
	}
	
	DFS(1, 0);
	
	for (i = 1 ; i <= m ; i++)
		fprintf (f, "%d\n", SOL [ Q[i] ] [ P[i] ]);
		
	
	fclose(f);
	fclose(g);
	return 0;
}