Pagini recente » Cod sursa (job #87599) | Cod sursa (job #1014186) | Cod sursa (job #1527218) | Cod sursa (job #1155003) | Cod sursa (job #2714026)
#include <bits/stdc++.h>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int lookup[18][250001],n,m,parents[250001],powers[20];
int HighestPower (int x)
{
int p =(int)floor(log2(x));
return p;
}
void BuildTable()
{
int i,j;
for(j=1;j<=log2(n);j++)
for(i=1;i<=n;i++)
{
lookup[j][i]=lookup[j-1][lookup[j-1][i]];
}
}
int DFS(int node,int dist)
{
int x=HighestPower(dist);
if(dist!=0) return DFS(lookup[x][node],dist-powers[x]);
else return node;
}
int main()
{
f>>n>>m;
int i,a,b;
for(i=1;i<=n;i++)
{
f>>lookup[0][i];
}
for(i=0;i<=17;i++)
powers[i]=(1<<i);
BuildTable();
for(i=1;i<=m;i++)
{
f>>a>>b;
if(b==1) g<<lookup[0][a]<<"\n";
else g<<DFS(a,b)<<"\n";
}
}