Cod sursa(job #1000661)

Utilizator beldeabogdanBogdan Beldea beldeabogdan Data 23 septembrie 2013 15:43:36
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <cstdio>
#include <vector>
using namespace std;

struct rasp {
	int ord,p;
};
vector <rasp> r[300001];
vector <int> v[250001];
int n,m;
int stk[250001],stp;
int result[300001];

void dfs(int n) {
	rasp nw;
	int p,ord;
	stk[stp+1] = n;
	stp++;
	while (!r[n].empty()) {
		nw = r[n].back(); r[n].pop_back();
		p = nw.p; ord = nw.ord;
		if (stp-p>0) result[ord] = stk[stp-p];
		else result[ord] = 0;
	}
	int size = v[n].size();
	for (int i=0;i<size;i++) {
		dfs(v[n][i]);
	}
	stp--;
}

int main() {
	freopen("stramosi.in","r",stdin);
	freopen("stramosi.out","w",stdout);
	scanf("%d %d",&n,&m);
	for (int i=1;i<=n;i++) {
		int a;
		scanf("%d",&a);
		v[a].push_back(i);
	}
	for (int i=1;i<=m;i++) {
		int p,q;
		scanf("%d %d",&q,&p);
		rasp nw;
		nw.ord=i;
		nw.p = p;
		r[i].push_back(nw);
	}
	dfs(0);
	for (int i=1;i<=m;i++) {
		printf("%d\n",result[i]);
	}
	return 0;
}