Cod sursa(job #260967)

Utilizator diannaDiaconu Diana dianna Data 17 februarie 2009 19:43:57
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<fstream.h>
ifstream f("stramosi.in");
ofstream g("stramosi.out");
const long Nmax=250010;
struct elem
{
	int inf;
	elem *urm;
}*a[Nmax];
struct cer
{
	int inf,nr;
	cer *urm;
}*c[300010];
long n,m,t[Nmax],nv[Nmax],sol[100],viz[Nmax];

void citire()
{
 long i;
 long x,y;
 f>>n>>m;
 for(i=1;i<=n;i++)
 {
	f>>x;
	t[i]=x;
	elem *p=new elem;
	p->inf=i;
	p->urm=a[x];
	a[x]=p;
 }
 for(i=1;i<=m;i++)
 {
	f>>x>>y;
	cer *q=new cer;
	q->inf=y;
	q->nr=i;
	q->urm=c[x];
	c[x]=q;
 }
}

void afisare()
{
 for(long i=1;i<=m;i++)
	g<<sol[i]<<'\n';
}

void parcurg(int niv,int vf)
{
 nv[niv]=vf;
 viz[vf]=1;
 for(cer *q=c[vf];q;q=q->urm)
 {
	sol[q->nr]=nv[niv-q->inf];
 }
 for(elem *p=a[vf];p;p=p->urm)
	parcurg(niv+1,p->inf);
 viz[vf]=0;
}

int main()
{
 citire();
 for(long i=1;i<=n;i++)
	if(t[i]==0)
		parcurg(0,i);
 afisare();
 g.close();
 return 0;
}