Cod sursa(job #1526694)

Utilizator ducu34Albastroiu Radu Gabriel ducu34 Data 17 noiembrie 2015 01:27:12
Problema Stramosi Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <cstdio>
#define N 250001

using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int p,q,i,n,m,x;
bool radacini[N];
vector<int>stiva,lista[N],v[N];
void completare(int k,int t)
{
    int i,j,val;
    for(j=0;j<stiva.size();j++)
        lista[k].push_back(stiva[j]);
    stiva.push_back(k);
    for(i=0;i<v[k].size();i++)
    {
        val = v[k][i];
        if(val!=t)
        {
            completare(val,k);
            stiva.pop_back();
        }
    }
}

int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        fin>>x;
        if(x!=0)
        {
            v[i].push_back(x);
            v[x].push_back(i);
        }
        else
            radacini[i]=1;
    }
    for(i=1;i<=n;i++)
    {
        if(radacini[i])
        {
            completare(i,0);
            while(!stiva.empty())
                stiva.pop_back();
        }
    }
    for(i=1;i<=m;i++)
    {
        fin>>p>>q;
        n = lista[p].size();
        if(q > n)
            fout<<0<<"\n";
        else
            fout<< lista[p][n-q] <<"\n";
    }
    return 0;
}