Cod sursa(job #1588319)
| Utilizator | Data | 2 februarie 2016 22:56:39 | |
|---|---|---|---|
| Problema | Stramosi | Scor | 80 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.58 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int n,q,dad[250005][20];
int Solve(int x,int k)
{ int i;
for(i=0;i<=19 && x;i++)
if (k&(1<<i)) x=dad[x][i];
return x;
}
void Build()
{ int i,p;
for(p=1;p<=19;p++)
for(i=1;i<=n;i++)
dad[i][p]=dad[dad[i][p-1]][p-1];
}
int main()
{ int i,x,y;
f>>n>>q;
for(i=1;i<=n;i++)
{ f>>x;
dad[i][0]=x;
}
Build();
for(i=1;i<=q;i++)
{ f>>x>>y;
g<<Solve(x,y)<<"\n";
}
return 0;
}
