Cod sursa(job #323970)

Utilizator pcinfoCarmen Popescu pcinfo Data 14 iunie 2009 12:12:11
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<cstdio> 
#include <vector>

using namespace std;

struct nod {
	int gr;
	vector<int> fii;
};

int p[20][250003];
int exp[19]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144};

int main()
{
	int n,vf,i,j,m,k,ok;
	
	freopen("stramosi.in","r",stdin);   
	freopen("stramosi.out","w",stdout);   
	
	scanf("%d %d",&n,&m);
	
	for (i=0;i<=n;i++)
	{
		for (j=0;j<19;j++)
			p[j][i]=0;
	}
	
	for (i=1;i<=n;i++)
	{
		scanf("%d",&j);
		if (j>0)
			p[0][i]=j;
	}
		
	ok=1;
	for (j=1; j<19 && ok; j++)
	{
		ok=0;
		for (i=1;i<=n;i++)
		{
			p[j][i]=p[j-1][p[j-1][i]];  // stramosul de ord 2^j a lui i este
										// stramosul de ord 2^(j-1) al (stramosului de ord 2^(j-1) al lui i)
			if (p[j][i]!=0)
				ok=1;
		}
	}
	
	
	while (m>0)
	{
		m--;
		scanf("%d%d",&j,&i);
		// stramosul de ord i al lui j
		
		k=0;
		while (i>0)
		{
			if (i%2==1)
				j=p[k][j];
			k++;
			i=i/2;
		}
		printf("%d\n",j);
	}
	
	return 0;
}