Cod sursa(job #1977752)

Utilizator miruna999Morarasu Miruna miruna999 Data 5 mai 2017 23:15:42
Problema Stramosi Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int n,m,t[250005],d[250005],viz[250005],j,q,p;
vector<int>::iterator it;
vector<vector<int>>v(250005);

void df(int k)
{
    viz[k]=1;
    if(v[k].size())
        for(it=v[k].begin();it<v[k].end();++it)
            if(*it<=n && !viz[*it])
                d[*it]=d[k]+1,df(*it);
}

int inapoi(int q,int p)
{
    int k=q,nr=0;
    while(k && nr<p)
        nr++,k=t[k];
    return k;
}

int main()
{
    f>>n>>m;
    for(int i=1;i<=n;i++)
        f>>t[i],v[t[i]].push_back(i);

    for(int i=1;i<=n;i++)
        if(!t[i])
            j=0,df(i);

    for(int i=1;i<=m;i++)
    {
        f>>q>>p;
        if(p>d[q])
            g<<0<<'\n';
        else
            g<<inapoi(q,p)<<'\n';
    }
    return 0;
}