Pagini recente » Cod sursa (job #2145691) | Cod sursa (job #1926367) | Cod sursa (job #587751) | Cod sursa (job #251398) | Cod sursa (job #190424)
Cod sursa(job #190424)
#include<stdio.h>
struct cer {int poz,x; cer *adr;} *c[351000];
struct nod {int inf; nod *adr;} *v[251000];
int rez[250110],viz[250110],n,m,i,x,y,s[250011],t[250011];
void DF(int x,int niv){
viz[x]=1;
s[niv]=x;
nod *p;
cer *q;
p=v[x];
q=c[x];
for(;q!=NULL;q=q->adr){
if( niv-(q->x) <=0 )
rez[q->poz]=0;
else
rez[q->poz]=s[ niv - (q->x) ];
}
for(;p!=NULL;p=p->adr){
if(!viz[p->inf])
DF(p->inf,niv+1);
}
}
int main(){
FILE *f=fopen("stramosi.in","r");
fscanf(f,"%d %d",&n,&m);
for(i=1;i<=n;i++){
fscanf(f,"%d",&x);
t[i]=x;
nod *p=new nod;
p->inf=i;
p->adr=v[x];
v[x]=p;
}
for(i=1;i<=m;i++){
fscanf(f,"%d %d",&y,&x);
cer *q=new cer;
q->poz=i;
q->x=x;
q->adr=c[y];
c[y]=q;
}
fclose(f);
for(i=1;i<=n;i++)
if(!t[i])
DF(i,1);
FILE *g=fopen("stramosi.out","w");
for(i=1;i<=m;i++)
fprintf(g,"%d\n",rez[i]);
fclose(g);
return 0;
}