Cod sursa(job #500917)

Utilizator bog29Antohi Bogdan bog29 Data 13 noiembrie 2010 17:45:46
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<fstream>
#include<vector>
#define dmax 250003
#define mmax 300003
using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");

int n,m,k,r[dmax],st[dmax];

struct query
{	int a;
	int b;
	int s;
}	q[mmax];

struct z
{	int nr;
	int crt;
};

vector<struct z>x[dmax];
vector<struct z>::iterator ir;

vector<int>g[dmax];

void dfs(int k,int p)
{	int i;
	vector<int>::iterator it;
	
	for(ir=x[k].begin();ir<x[k].end();ir++)
	{	if(ir->nr >= p-1)
			q[ir->crt].s=0;
		else q[ir->crt].s=st[p-ir->nr-1];
	}	

	for(it=g[k].begin();it<g[k].end();it++)
	{	st[p]=*it;
		dfs(*it,p+1);
	}	
}	


int main()
{	int i;
	z w;
	in>>n>>m;
	
	for(i=1;i<=n;i++)
	{	in>>k;
		r[i]=k;
		g[k].push_back(i);
	}	
	
	for(i=1;i<=m;i++)
	{	in>>q[i].a>>q[i].b;	
		w.crt=i;
		w.nr=q[i].b;
		x[q[i].a].push_back(w);
	}
	in.close();
	
	
	for(i=1;i<=n;i++)
		if(!r[i])
		{	st[1]=i;
			dfs(i,2);
		}
		
	for(i=1;i<=m;i++)
		out<<q[i].s<<'\n';	
		
	out.close();
	return 0;
}