Cod sursa(job #391407)

Utilizator blasterzMircea Dima blasterz Data 5 februarie 2010 17:19:07
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#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;
}