Cod sursa(job #363918)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 14 noiembrie 2009 23:47:59
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstdio>
#include <vector>
#define MMAX 300010
#define NMAX 250010
using namespace std;

vector <int> G[NMAX], V[MMAX], R[MMAX];
int n, m, h, S[NMAX], x[MMAX], p[NMAX];
char U[NMAX];

void df(int nod, int h)
{
	int i;
	U[nod]=1;
	S[h]=nod;
	for (i=0; i<V[nod].size(); i++) 
		if (h>=V[nod][i])
			R[nod].push_back(S[h-V[nod][i]]); else
			R[nod].push_back(0);
	for (i=0; i<G[nod].size(); i++)
		if (!U[G[nod][i]]) df(G[nod][i],h+1);
}

int main()
{
	freopen("stramosi.in","r",stdin);
	freopen("stramosi.out","w",stdout);
	scanf("%d %d",&n,&m);
	int i, y, a;
	for (i=1; i<=n; i++) 
	{
		scanf("%d",&a);
		G[a].push_back(i);
	}
	for (i=1; i<=m; i++)
	{
		scanf("%d %d",&x[i],&y);
		V[x[i]].push_back(y);
	}
	df(0, 0);
	for (i=1; i<=n; i++) p[i]=0;
	for (i=1; i<=m; i++)
	{
		printf("%d\n",R[x[i]][p[x[i]]]);
		p[x[i]]++;
	}
}