Cod sursa(job #1495333)

Utilizator CollermanAndrei Amariei Collerman Data 2 octombrie 2015 22:28:56
Problema Stramosi Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <fstream>
#include <vector>
#include <bitset>
#include <queue>
using namespace std;
ofstream fout("stramosi.out");
ifstream fin("stramosi.in");

const int NMAX = 250050;

int n, m;
vector<int> Fii;
vector<int> Graf[NMAX];
vector<int> Sol[NMAX];
bitset<NMAX> Viz;

void dfs(int nod)
{
    Sol[nod] = Fii;
    if(nod) Fii.push_back(nod);

    for(auto x : Graf[nod]) {
        if(!Viz[x])
            Viz[x] = 1;
            dfs(x);
    }

    Fii.pop_back();
}

int main()
{
    fin >> n >> m;
    for(int i=1, x; i<=n; i++) {
        fin >> x;
        Graf[x].push_back(i);
    }

    dfs(0);
    for(int i=1, x, y; i<=m; i++) {
        fin >> x >> y;
        if(Sol[x].size() >= y) fout << Sol[x][Sol[x].size()-y] << '\n';
        else fout << "0\n";
    }

    return 0;
}