Cod sursa(job #387804)

Utilizator GotenAmza Catalin Goten Data 28 ianuarie 2010 14:48:38
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include<fstream.h>

int n,m,i,x,padre[251000],ver[250100],leg[250100],start[250100],k,eu[500100],niv[500100],bg[250100];

void dfs(int nod, int nivel)
{
	int t;
	eu[++k]=nod;
	if(!bg[nod])
		bg[nod]=k;
	niv[k]=nivel;
	t=start[nod];
	while(t)
	{
		dfs(ver[t],nivel+1);
		t=leg[t];
	}
	if(nod)
	{
		eu[++k]=padre[nod];
		niv[k]=nivel-1;
	}
}

int main()
{
	int nod,dif;
	ifstream f("stramosi.in");
	ofstream g("stramosi.out");
	f>>n>>m;
	for(i=1;i<=n;i++)
	{
		f>>x;
		padre[i]=x;
		ver[i]=i;
		leg[i]=start[x];
		start[x]=i;
	}
	padre[0]=-1;
	dfs(0,0);
	for(i=1;i<=m;i++)
	{
		f>>nod>>dif;
		if(niv[bg[nod]]<dif)
			g<<"0\n";
		else
		{
			while(dif)
			{
				dif--;
				nod=padre[nod];
			}
			g<<nod<<'\n';
		}
	}
	return 0;
}