Cod sursa(job #1112200)

Utilizator NistorSergiuNistor Sergiu NistorSergiu Data 19 februarie 2014 15:56:35
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <cstdio>
#include <vector>
using namespace std;
int stra[20][250001];
int pn;
vector <int> gr[250001];
void dfs(int vf)
{
    int p2=0,nod=stra[0][vf],i;
    while(stra[p2][nod])
    {
        stra[p2+1][vf]=stra[p2][nod];
        nod=stra[p2][nod];
        p2++;
    }
    for(i=0;i<gr[vf].size();i++)
        dfs(gr[vf][i]);
}

int cauta(int x, int p)
{
	int i;
	for(i=0;((1<<i)<=p)&&(x);i++)
		if((1<<i)&p)
			x=stra[i][x];
	return x;
}
int main()
{
    int n,m;
    int i;
	int x,p;
    freopen("stramosi.in","r",stdin);
    scanf("%d %d\n",&n,&m);
    for(i=1;i<=n;i++)
    {
        scanf("%d ",&stra[0][i]);
        gr[stra[0][i]].push_back(i);
    }
    dfs(0);
	while((1<<pn)<n)
		pn++;
	pn--;
    freopen("stramosi.out","w",stdout);
	for(i=0;i<m;i++)
	{
		scanf("%d %d\n",&x,&p);
		printf("%d\n",cauta(x,p));
	}
	fclose(stdin);
	fclose(stdout);
    return 0;
}