Cod sursa(job #281551)

Utilizator alisssiaMititelu Andra alisssia Data 15 martie 2009 12:23:59
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
using namespace std;
#define Nmax 250000
#include<cstdio>
struct nod { int v; nod* next;};
nod * a[Nmax],*sol[Nmax];
int n,m,viz[Nmax];

void add(int i,int j)
{
	nod *p=new nod;
	p->v=i;
	p->next=a[j];
	a[j]=p;
}

void read()
{
	int i,j;
	freopen("stramosi.in","r",stdin);
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++)
		{
			scanf("%d",&j);
			add(i,j);
		}
}

int caut(int i,int j)
{
	nod *u=sol[i];
	for(j;j>0 && u;j--)
		u=u->next;
	if(u->v)
	return u->v;
	return 0;
}

void add2(int i,int j)
{
	nod*p=new nod;
	p->v=i;
	p->next=sol[j];
	sol[j]=p;
}

void dfs(int i)
{
	viz[i]=1;
	for(nod*u=a[i];u;u=u->next)
		if(!viz[u->v]) 
			{
				add2(u->v,i);
				dfs(u->v);
		}
}

int main()
{
	int i,x,y;
	read();
	dfs(1);
	freopen("stramosi.out","w",stdout);
	for(i=1;i<=m;i++)
		{
			scanf("%d%d",&x,&y);
			printf("%d\n",caut(x,y));
	}
	return 0;
}