Pagini recente » Cod sursa (job #3218016) | Cod sursa (job #778470) | Cod sursa (job #904972) | Cod sursa (job #3139910) | Cod sursa (job #3247407)
#include <bits/stdc++.h>
using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");
const int maxp2=19, nmax=250001;
int stramos[maxp2][nmax];
int n, m;
void PrecalculateAncestors()
{
for(int i=1; i<maxp2; i++)
{
for(int j=1; j<=n; j++)
{
stramos[i][j]=stramos[i-1][stramos[i-1][j]];
}
}
}
int FindAncestor(int node, int kth)
{
if(kth>=(1<<maxp2)) return 0;
for(int i=0; i<maxp2; i++)
if(kth&(1<<i))
node=stramos[i][node];
return node;
}
int main()
{
int q, p;
in>>n>>m;
for(int i=1; i<=n; i++)
{
in>>stramos[0][i];
}
PrecalculateAncestors();
for(int i=1; i<=m; i++)
{
in>>q>>p;//al p-lea stramos al nodului q
out<<FindAncestor(q, p)<<'\n';
}
return 0;
}