Pagini recente » Cod sursa (job #1280894) | Cod sursa (job #1976109) | Cod sursa (job #2137896) | Cod sursa (job #980329) | Cod sursa (job #1434822)
#include <fstream>
#include <vector>
#include <array>
using namespace std;
constexpr int max_adanc = 21;
using tabel = vector<array<int, max_adanc> >;
void citeste_date(ifstream& f, int& m, tabel& tabel_stramosi){
int n = 0;
f >> n >> m;
tabel_stramosi.resize(n+1);
for(int i = 1; i <= n; ++i){
f >> tabel_stramosi[i].front(); }
for(int adanc = 1; adanc < max_adanc; ++adanc){
for(int i = 0; i <= n; ++i){
tabel_stramosi[i][adanc] = tabel_stramosi[tabel_stramosi[i][adanc-1]][adanc-1]; } } }
int query_tabel(const tabel& tabel_stramosi, int x, int n){
for(int i = 0; i < 32; ++i){
if(n & (1<<i)){
x = tabel_stramosi[x][i]; } }
return x; }
int main(){
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int m;
tabel tabel_stramosi;
citeste_date(f, m, tabel_stramosi);
for(int i = 0, x, n; i < m; ++i){
f >> x >> n;
g << query_tabel(tabel_stramosi, x, n) << '\n'; }
return 0; }