Cod sursa(job #3301048)

Utilizator ifrimdragosIfrim Dragos ifrimdragos Data 21 iunie 2025 12:22:41
Problema Stramosi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <vector>
using namespace std;

///it doesn't work

ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
const int nmax = 250005;
const int mmax = 300005;
vector <int> sons[nmax];
vector <pair<int , int>> queries[nmax];
vector <int> crnt;
int sol[mmax];

void dfs(int dad)
{
    crnt.push_back(dad);
    for(auto qry : queries[dad])
    {
        int idx = qry.second;
        int ancs = qry.first;
        if(crnt.size() - 1 - ancs >= 0)
        {
            sol[idx] = crnt[crnt.size() - 1 - ancs];
        }
    }
    for(int son : sons[dad])
    {
        dfs(son);
    }
    crnt.pop_back();
}


int main()         ///stramosi in o(n + m)
{

    int n , m;
    fin >> n >> m;
    for(int i = 1;i <= n;i++)
    {
        int dad;
        fin >> dad;
        sons[dad].push_back(i);
    }
    for(int i = 1;i <= m; i++)
    {
        int ancs  , son;
        fin >> ancs >> son;
        queries[son].push_back({ancs , i});      ///{ancestor , index}
    }
    dfs(0);
    for(int i = 1; i <= m; i++)
    {

          fout << sol[i] << '\n';

    }


    return 0;
}