Pagini recente » Cod sursa (job #1130778) | Istoria paginii runda/baraj1 | tema | Cod sursa (job #2314181) | Cod sursa (job #1288670)
#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 };
ifstream fin"stramosi.in");
ofstream fout("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){ fout << g[q][t]<<"\n"; }
else if (t == -1){ fout << 0 << "\n"; }
else
{
calculeaza(p - doi[t], g[q][t]);
}
}
int main()
{
int i, n,m,p,q,j,t;
fin >> n;
fin >> m;
for (i = 1; i <= n; i++)
{
fin >> g[i][0];
marcheaza(i);
}
for (i = 1; i <= m; i++)
{
fin >> q;
fin >> p;
calculeaza(p, q);
}
}