Pagini recente » Cod sursa (job #647656) | Cod sursa (job #1761152) | Cod sursa (job #2021816) | Cod sursa (job #1942891) | Cod sursa (job #808213)
Cod sursa(job #808213)
#include<fstream>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
#define nmax 250005
#define mmax 300005
int n,m,r[nmax],st[nmax];
struct nod
{
int inf;
nod *adr;
} *v[nmax];
struct intr
{
int nr,s;intr *adr;
} *x[mmax];
void citire()
{
f>>n>>m;
int z,k,l;
for(int i=1;i<=n;i++)
{
f>>z;
nod *p=new nod;
p->inf=i;
p->adr=v[z];
v[z]=p;
}
for(int i=1;i<=m;i++)
{
f>>k>>l;
intr *p=new intr;
p->nr=i;
p->s=l;
p->adr=x[k];
x[k]=p;
}
}
void raspund(int nd,int niv)
{
for(intr *p=x[nd];p!=NULL;p=p->adr)
{
if(niv-x[nd]->s>0)
r[x[nd]->nr]=st[niv-x[nd]->s];
}
}
void dfs(int nd,int niv)
{
st[niv]=nd;raspund(nd,niv);
for(nod *p=v[nd];p!=NULL;p=p->adr)
dfs(p->inf,niv+1);
}
void afisare()
{
for(int i=1;i<=m;i++)
g<<r[i]<<'\n';
}
int main()
{
citire();
for(nod *p=v[0];p!=NULL;p=p->adr)
dfs(p->inf,1);
afisare();
return 0;
}