Cod sursa(job #3181379)

Utilizator divadddDavid Curca divaddd Data 6 decembrie 2023 22:10:31
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <bits/stdc++.h>
#define pii pair<int, int>
using namespace std;
const int NMAX = 25e4+2;
const int MMAX = 3e5+2;
int n,m,t[NMAX],sol[MMAX],vf[NMAX],st[NMAX];
vector<int> v[NMAX];
vector<pii> queries[NMAX];

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

void dfs(int nod, int niv = 1){
    st[niv] = nod;
    for(auto [k, idx]: queries[nod]){
        sol[idx] = st[niv-k];
    }
    vf[nod] = 1;
    for(int fiu: v[nod]){
        if(vf[fiu] == 1){
            continue;
        }
        dfs(fiu, niv+1);
    }
}

int main()
{
    fin >> n >> m;
    for(int i = 1; i <= n; i++){
        int x;
        fin >> x;
        if(x == 0){
            continue;
        }else{
            v[i].push_back(x);
            v[x].push_back(i);
        }
    }
    for(int i = 1; i <= m; i++){
        int q, p;
        fin >> q >> p;
        queries[q].push_back({p, i});
    }
    for(int i = 1; i <= n; i++){
        if(vf[i] == 0){
            dfs(i);
        }
    }
    for(int i = 1; i <= m; i++){
        fout << sol[i] << "\n";
    }
    return 0;
}