Pagini recente » Cod sursa (job #1187825) | Cod sursa (job #1184131) | Cod sursa (job #989189) | Cod sursa (job #362876) | Cod sursa (job #982933)
Cod sursa(job #982933)
#include <fstream>
#include <vector>
using namespace std;
const int Nmax = 250010;
const int Lmax = 20;
const int root = 0;
ifstream F("stramosi.in");
ofstream G("stramosi.out");
int S[Lmax][Nmax],N,M,Log[Nmax];
int main()
{
F>>N>>M;
int co = 0;
for (int i=1,x;i<=N;++i)
{
F>>S[0][i];
co += (!S[0][i]);
}
for (int step=1;co>0;++step)
{
co = 0;
for (int i=1;i<=N;++i)
{
if ( S[step-1][ S[step-1][i] ] == 0 )
continue;
S[step][i] = S[step-1][ S[step-1][i] ];
++co;
}
}
for (int i=1,j=0;i<=N;i*=2,++j)
Log[i] = j;
for (int i=2;i<=N;++i)
Log[i] = Log[i] == 0 ? Log[i-1] : Log[i];
for (int i=1,nod,x;i<=M;++i)
{
F>>nod>>x;
while ( x > 0 )
{
int bit = ( x & (x-1) ) ^ x;
x -= bit;
bit = Log[bit];
if ( S[bit][nod] == 0 )
{
nod = 0;
break;
}
else
nod = S[bit][nod];
}
G<<nod<<'\n';
}
}