Pagini recente » Cod sursa (job #1108963) | Statistici Szabo Johanna (johanna) | Cod sursa (job #1190247) | Cod sursa (job #2720943) | Cod sursa (job #1442448)
#include<fstream>
#include<vector>
#define MAX 250004
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
vector<int> vec[MAX],fii[MAX],s,rad;
int m,n,p,q;
void dfs(int nod)
{
int l=s.size(),p=1;
s.push_back(nod);
while((l-p)>=0)
{
vec[nod].push_back(s[l-p]);
p*=2;
}
l=fii[nod].size();
for(int i=0;i<l;i++)
dfs(fii[nod][i]);
s.pop_back();
}
int stramosi(int p, int q)
{
int e=0;
while(p&&e<vec[q].size())
{
if(p%2)
{
q=vec[q][e];
}
e++;
p=p/2;
}
if(p!=0)
return 0;
return q;
}
int main()
{
f>>n>>m;
for(int i=1;i<=n;i++)
{
int x;
f>>x;
if(!x)
rad.push_back(i);
else
fii[x].push_back(i);
}
int l=rad.size();
for(int i=0;i<l;i++)
dfs(rad[i]);
for(int i=0;i<m;i++)
{
f>>q>>p;
g<<stramosi(p,q)<<"\n";
}
f.close();g.close();
return 0;
}