Pagini recente » Cod sursa (job #2813225) | Cod sursa (job #1466090) | Cod sursa (job #1372486) | Cod sursa (job #50540) | Cod sursa (job #1771675)
//
// main.cpp
// Stramosi
//
// Created by Albastroiu Radu on 10/5/16.
// Copyright © 2016 Albastroiu Radu. All rights reserved.
//
#include <iostream>
#include <fstream>
#include <algorithm>
#include <unordered_map>
#include <vector>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int i, j, n, m, x, y;
int dinamica[25][250001];
/* All you need to understand :
d[i][j] = d[ d[i][j-1] ][j-1]
i - element (node)
j - distance (2^j)
d[i][j] - parrent of i at 2^j distance */
int main()
{
// read;
fin >> n >> m;
for(i=1;i<=n;i++)
fin >> dinamica[0][i];
// precompute dinamica
for(j=1;j<=17;j++)
{
for(i=1;i<=n;i++)
{
dinamica[j][i] = dinamica[j-1][dinamica[j-1][i]];
}
}
// computing the distance in log time
for(i=1;i<=m;i++)
{
fin >> x >> y;
j = 0;
while(y)
{
if(y%2)
{
x = dinamica[j][x];
}
j++;
y /= 2;
}
fout << x << "\n";
}
return 0;
}