Cod sursa(job #3152551)

Utilizator DajaMihaiDaja Mihai DajaMihai Data 25 septembrie 2023 18:47:45
Problema Stramosi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, m;
vector<vector<int>> v;
int rang[250011]; // rang imi permite sa merg doar in sus pe arbore

int nod, p;

int get_nthAncestor(int no, int target){
    if(rang[no] == target){
        out << no << endl;
        return 1;
    }

    if(rang[no] == 0){
        out << "0" << endl;
    }
    int k = 0;
    for(int i : v[no]){
        if(rang[i] < rang[no]){
            k= 1;
            get_nthAncestor(i, target);
        }
    }
}

int main()
{
    in >> n >> m;
    v.resize(n+112);
    int x;
    for(int i = 1; i <= n; i ++){
        in >> x;
        if(x == 0)
            rang[i] = 0;
        else
        rang[i] = rang[x] + 1;
        v[i].push_back(x);
        v[x].push_back(i);
    }

    for(int i = 0; i < m; i ++){
        in >> nod >> p;
        get_nthAncestor(nod, rang[nod] - p);
    }

    return 0;
}