Pagini recente » Cod sursa (job #853727) | Cod sursa (job #1418907) | Cod sursa (job #976153) | Cod sursa (job #1159781) | Cod sursa (job #1287565)
#include <iostream>
#include <fstream>
using namespace std;
int g[250001][20];
const int doi[20] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288 };
ofstream out("stramosi.out");
void marcheaza(int n)
{
int c = g[n][0],p=0;
while (g[c][p] != 0)
{
g[n][p+1] = g[c][p];
c = g[c][p];
p++;
}
}
void calculeaza(int p, int q)
{
int t = 18;
while (doi[t] > p)
{
if (t == -1){ break; }
t--;
}
if (doi[t] == p){ out << g[q][t]<<"\n"; }
else if (t == -1){ out << 0 << "\n"; }
else
{
calculeaza(p - doi[t], g[q][t]);
}
}
int main()
{
ifstream in("stramosi.in");
int i, n,m,p,q,j,t;
in >> n;
in >> m;
for (i = 1; i <= n; i++)
{
in >> g[i][0];
marcheaza(i);
}
for (i = 1; i <= m; i++)
{
in >> q;
in >> p;
calculeaza(p, q);
}
}