Pagini recente » Cod sursa (job #2721765) | Cod sursa (job #2317434) | Cod sursa (job #734462) | Cod sursa (job #1348168) | Cod sursa (job #387809)
Cod sursa(job #387809)
#include<fstream.h>
int n,m,i,x,padre[251000],ver[250100],leg[250100],start[250100],k,eu[500100],niv[500100],bg[250100];
void dfs(int nod, int nivel)
{
int t;
eu[++k]=nod;
if(!bg[nod])
bg[nod]=k;
niv[k]=nivel;
t=start[nod];
while(t)
{
dfs(ver[t],nivel+1);
t=leg[t];
}
if(nod)
{
eu[++k]=padre[nod];
niv[k]=nivel-1;
}
}
int main()
{
int nod,dif;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
f>>n>>m;
for(i=1;i<=n;i++)
{
f>>x;
padre[i]=x;
ver[i]=i;
leg[i]=start[x];
start[x]=i;
}
padre[0]=-1;
dfs(0,0);
for(i=1;i<=m;i++)
{
f>>nod>>dif;
if(niv[bg[nod]]<dif)
g<<"0\n";
else
{
n=niv[bg[nod]]-dif;
nod=bg[nod];
while(niv[nod]!=n)
{
nod-=dif;
dif=n-niv[nod];
}
g<<eu[nod]<<'\n';
}
}
return 0;
}