Cod sursa(job #774226)

Utilizator starduststardust stardust Data 3 august 2012 20:02:20
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<vector>
#include<fstream>
#define maxn 400010
#define pb push_back
using namespace std;
 
bool uz[maxn];
vector<int>a[maxn];
vector<int>query[maxn];
vector<int>ans[maxn];
vector<int>tati;
int st[maxn],cnt[maxn];
int vec[maxn];
ifstream in("stramosi.in");
ofstream out("stramosi.out");

int n,m;

void read()
{
	in>>n>>m;
	int x,y;
	for(int i=1;i<=n;i++)
	{
		in>>x;
		if(x>0)
		a[x].pb(i);
		else tati.pb(i);
	}
	for(int i=1;i<=m;i++)
	{
		in>>x>>y;
		query[x].pb(y);
		vec[i]=x;
	}
}

void dfs(int nod,int niv)
{
	st[niv]=nod;
	uz[nod]=1;
	for(int i=0;i<query[nod].size();i++)
	{
		if(niv-query[nod][i]>0) ans[nod].pb(st[niv-query[nod][i]]);
		else ans[nod].pb(0);
	}
	for(int i=0;i<a[nod].size();i++)
		if(uz[a[nod][i]]==0)
			dfs(a[nod][i],niv+1);
}

int main()
{
	read();
	for(int i=0;i<tati.size();i++)
		dfs(tati[i],1);
	
	for(int i=1;i<=m;i++)
	{
		int x=vec[i];
		out<<ans[x][cnt[x]]<<"\n";
		cnt[x]++;
	}
}