Cod sursa(job #730583)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 6 aprilie 2012 16:10:25
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<fstream>
#include<bitset>
#include<vector>
#define nmax 250005
#define mmax 300005
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");

vector<int>G[nmax];
vector< pair < int , int > >L[nmax];
int Find[mmax],St[nmax],q,p,ii,nod,niv,n,m,i,x;
bitset < mmax > viz;
void dfs(int nd)  {
	St[++niv]=nd;
	viz[nd]=1;
	for(int i=0;i<L[nd].size();++i){
		
		ii=L[nd][i].first;
		nod=L[nd][i].second;
		
		if(niv<nod)
			Find[ii]=0;
		else
			Find[ii]=St[niv-nod];
	}
	
	for(int i=0;i<G[nd].size();++i)
		if(!viz[G[nd][i]])
			dfs(G[nd][i]);
	--niv;
}
int main () {
	
	f>>n>>m;
	
	for(i=1;i<=n;i++){
		f>>x;
		G[x].push_back(i);
	}
	
	
	for( i=1 ; i<=m ; i++ ){
		f>>q>>p;
		
		L[q].push_back(make_pair(i,p));
		
	}
	
	dfs(0);
	
	for(i=1;i<=m;i++)
		g<<Find[i]<<"\n";
	
	return 0;
}