Pagini recente » Cod sursa (job #2633202) | Cod sursa (job #2427110) | Cod sursa (job #2027106) | Cod sursa (job #372804) | Cod sursa (job #285456)
Cod sursa(job #285456)
#include<fstream.h>
ifstream f("stramosi.in");
ofstream g("stramosi.out");
# define maxn 300000
long n,m,z[maxn],stiva[maxn],sol[maxn],vf;
int viz[maxn];
struct lista
{
long inf;
lista *urm;
}*a[maxn];
struct elem
{
long inf,nr;
elem *urm;
}*c[maxn];
void add(long x,long y)
{
lista *q=new lista;
q->inf=y;
q->urm=a[x];
a[x]=q;
}
void citire()
{
long i,x,y;
f>>n>>m;
for(i=1;i<=n;i++)
{
f>>z[i];
add(z[i],i);
}
for(i=1;i<=m;i++)
{
f>>x>>y;
elem *q=new elem;
q->inf=y;
q->nr=i;
q->urm=c[x];
c[x]=q;
}
f.close();
}
void solutie(long i,long vf)
{
stiva[i]=vf;
elem*q=c[vf];
while(q)
{
if(i-q->inf>=0)
sol[q->nr]=stiva[i-q->inf];
else
sol[q->nr]=0;
q=q->urm;
}
lista *p=a[vf];
viz[vf]=1;
while(p)
{
if(viz[p->inf]==0)
solutie(i+1,p->inf);
p=p->urm;
}
}
void afisare()
{
long i;
for(i=1;i<=m;i++)
g<<sol[i]<<" ";
}
int main()
{
long i;
citire();
for(i=1;i<=n;i++)
if(z[i]==0)
solutie(0,i);
afisare();
f.close();
g.close();
return 0;
}