Cod sursa(job #3204667)

Utilizator alexandraiacobelAlexandra Iacob alexandraiacobel Data 17 februarie 2024 11:26:08
Problema Stramosi Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int n,m,i,j,str,sol[250005],mbr;
vector<pair<int,int>> queries[255000];
vector<int> L[255000];
vector<int> lant;
//raspund offline la queries

void dfs(int nod)
{
    lant.push_back(nod);
    for(auto qry: queries[nod])
    {
        int idx = lant.size() - 1- qry.first; // indexat de la 0
        // 0 1 2 3
        //1 2 4 7 .... al 2-lea al lui 7 = 4 - 1 - 2 = 1
        if(idx >= 0)
            sol[qry.second] = lant[idx];

    }
        for(int vec: L[nod])
            dfs(vec);
    lant.pop_back();
}

int main()
{
    fin>>n>>m;

    for(int i=1;i<=n;i++)
    {
        fin>>j;
        L[j].push_back(i);
        //tatal suprem este 0, e Adam ptc e la stramosii care nu mai stiu din ce vin. Dar evident ca si ei au un punct comun
    }
    for(int indc=1;indc<=m;indc++) //indc pastreaza ordinea intrebarilor
    {
        fin>>mbr>>str;
        queries[mbr].push_back({str,indc});//al x-lea stramos al membrului y
    }
    dfs(0);

    for(int i=1;i<=m;i++)
        fout<<sol[i]<<'\n';

    return 0;
}