Cod sursa(job #3333745)

Utilizator parus_majorParus Major parus_major Data 14 ianuarie 2026 23:42:19
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>

using namespace std;

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

#define MAXN 300002

int N, M, x;
vector<int> v[MAXN], queries[MAXN];
int DF[MAXN];
int Q[MAXN], P[MAXN], Ans[MAXN];
bool seen[MAXN];

void df(int node, int lv) {
    DF[lv] = node;
    seen[node] = true;
    for (const int& q : queries[node]) {
        int p = P[q];
        if (lv >= p) {
            Ans[q] = DF[lv - p];
        }
    }

    for (const int& neigh : v[node]) {
        df(neigh, lv + 1);
    }
}

int main()
{
    fin >> N >> M;
    for (int i = 1; i <= N; ++i) {
        fin >> x;
        v[x].push_back(i);
    }
    for (int i = 1; i <= M; ++i) {
        fin >> Q[i] >> P[i];
        queries[Q[i]].push_back(i);
    }


    for (int i = 1; i <= N; ++i) {
        if (seen[i]) continue;
        df(i, 0);
    }

    for (int i = 1; i <= M; ++i) {
        fout << Ans[i] << "\n";
    }
    return 0;
}