Cod sursa(job #1013822)

Utilizator stefanzzzStefan Popa stefanzzz Data 21 octombrie 2013 19:28:50
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>
#include <vector>
#define MAXN 250005
#define LOGMAXN 19
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");

int n,m,tata[MAXN][LOGMAXN],x,a;
vector<int> G[MAXN];

inline void DFS(int p);

int main()
{
    int i;
    f>>n>>m;
    for(i=1;i<=n;i++){
        f>>tata[i][0];
        G[tata[i][0]].push_back(i);}
    for(i=1;i<=n;i++)
        if(!tata[i][0])
            DFS(i);
    while(m--){
        f>>a>>x;
        for(i=LOGMAXN-1;i>=0&&x;i--)
            if(x>=(1<<i)){
                a=tata[a][i];
                x-=(1<<i);}
        g<<a<<'\n';}
    f.close();
    g.close();
    return 0;
}

inline void DFS(int p){
    int i,j;
    x=tata[p][0];
    for(i=0;x;i++){
        tata[p][i]=x;
        x=tata[x][i];}
    for(i=0;i<G[p].size();i++)
        DFS(G[p][i]);}