Cod sursa(job #730312)

Utilizator mariulaurMariu Laurentiu mariulaur Data 6 aprilie 2012 03:50:08
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<fstream>
#include<vector>
#define lim2 300005
#define lim1 250005

using namespace std;

ifstream f("stramosi.in");
ofstream g("stramosi.out");

vector<long>V[lim1];
vector< pair < long , long  >  >G[lim2];

long QQ[lim2];
long p,q,n,Q,i,x,idx,nd;

long  Stiva[lim2];

void dfs(long nod,long niv ) {
	Stiva[niv]=nod;
	for(int i=0;i<G[nod].size();++i){
		
		idx=G[nod][i].first;
		
		nd=G[nod][i].second;
		
		if(idx<niv)
			QQ[nd]=Stiva[niv-idx];
		else
			QQ[nd]=0;
	}
	
	for(int i=0;i<V[nod].size();++i){
		x=V[nod][i];
		dfs(x,niv+1);
	}
	
}

int main () {
	f>>n>>q;
	
	
	for(i=1;i<=n;i++){
		f>>x;
		V[x].push_back(i);
	}
	
	
	for(i=1;i<=q;i++){
		f>>Q>>p;
		
		G[Q].push_back(make_pair(p,i));
	}
	
	dfs(0,0);
	
	for(i=1;i<=q;i++)
		g<<QQ[i]<<"\n";
	
	return  0;
}