Cod sursa(job #731322)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 7 aprilie 2012 21:37:23
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<fstream>
#include<vector>
#include<stack>
#define lim 250007
#define lim1 300007
using namespace std;

ifstream f("stramosi.in");
ofstream g("stramosi.out");
vector< pair < int,int > > V[lim];
vector<int>G[lim];
int sol[lim1],dim,now,idx,j,x,y,n,m,i;

bool viz[lim];
vector<int>s;
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>>x>>y;
		V[x].push_back(make_pair(i,y));
	}
	
	stack<int>Q;
	Q.push(0);
	while(!Q.empty() ){
		
		now=Q.top();
		
		if(viz[now]==1 ){
			Q.pop();
			s.pop_back();
		}
		else {
			viz[now]=1;
			s.push_back(now);
			for(int i=0;i<G[now].size();++i)
				Q.push(G[now][i]);
			
			for(int i=0;i<V[now].size();++i ){
				
				idx=V[now][i].first;
				j=V[now][i].second;
				dim=s.size()-1;
				if( dim<j)
					sol[idx]=0;
				else
					sol[idx]=s[dim-j];
			}
		}
	}
	
	for(i=1;i<=m;i++)
		g<<sol[i]<<"\n";
	return 0;
}