Cod sursa(job #2972476)

Utilizator octavi26octavian octavi26 Data 29 ianuarie 2023 16:02:10
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <bits/stdc++.h>
#define N 250008

using namespace std;

ifstream fin("stramosi.in");
ofstream fout("stramosi.out");

int n, q;
int Dad[N];
int first;
vector<int> g[N];

void Citire()
{
    int i;
    fin >> n >> q;
    for( i=1; i<=n; i++ )
    {
        fin >> Dad[i];
        if( Dad[i] != 0 )
            g[ Dad[i] ].push_back(i);
    }
}

int Up[N][26];

void DFS( int x )
{
    for( auto y : g[x] )
    {
        Up[y][0] = x;
        for( int j=1; (1<<j) <= n; j++ )
            Up[y][j] = Up[ Up[y][j - 1] ][j - 1];
        DFS(y);
    }
}

void Rezolvare()
{
    int i;
    int x, k;
    for( i=1; i<=n; i++ )
        if( Dad[i] == 0 ) DFS(i);
    while( q-- )
    {
        fin >> x >> k;
        for( i = 26; i >= 0; --i )
            if( (1<<i) & k )
                x = Up[x][i];
        fout << x << "\n";
    }
}

int main()
{
    Citire();
    Rezolvare();
    return 0;
}