Cod sursa(job #1000598)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 23 septembrie 2013 14:20:18
Problema Stramosi Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int n,m,dist[250010];

vector<int> L[250010],C,st;

void dfs(int nod,int d){
    dist[nod]=d;
    for(register int i=0;i<L[nod].size();i++){
        dfs(L[nod][i],d+1);
    }
}

int main(void){
    int i,j,x,p,q;

    f>>n>>m;
    C.push_back(0);
    for(i=1;i<=n;i++){
        f>>x;
        if(!x)
            st.push_back(i),C.push_back(0);
        else{
            L[x].push_back(i);
            C.push_back(x);
        }
    }
    for(i=0;i<st.size();i++){
        dfs(st[i],0);
    }

    for(i=1;i<=m;i++){
        f>>q>>p;
        if(dist[q]<p){
            g<<"0\n";
            continue;
        }
        while(p>1 && C[q]>0){
            q=C[q];
            p--;
        }
        g<<C[q]<<"\n";
    }
    f.close();
    g.close();
    return 0;
}