Pagini recente » Cod sursa (job #1474606) | Cod sursa (job #1390777) | Cod sursa (job #81494) | Cod sursa (job #2662065) | Cod sursa (job #138177)
Cod sursa(job #138177)
#include <stdio.h>
#define DIM 250001
struct nod {
int v;
nod *urm;
};
struct cer {
int poz;
int str;
cer *urm;
};
//int k[DIM];
int t[DIM];
int n,i,r,x,y,m,aa,bb;
int s[DIM];
int rez[DIM];
nod *p[DIM],*q;
cer *u[DIM],*qq;
void parc(int x, int niv){
nod *q;
s[niv]=x;
cer *qq;
qq=u[x];
while (qq!=NULL) {
if (qq->str<niv){
rez[qq->poz]=s[niv-qq->str];
} else {
rez[qq->poz]=0;
}
qq=qq->urm;
}
/* if (k[x]==0) {
rez[x]=0;
} else {
if (s[niv-k[x]]>0)
rez[x]=s[niv-k[x]];
else
rez[x]=0;
}*/
q=p[x];
while (q!=NULL) {
// if ()
parc(q->v, niv+1);
q=q->urm;
}
}
int main(){
FILE *f = fopen("stramosi.in","r");
fscanf(f,"%d %d",&n,&m);
for (i=1;i<=n;i++){
p[i]=NULL;
u[i]=NULL;
}
for (i=1;i<=n;i++){
fscanf(f,"%d",&y);
if (y!=0) {
t[i]=1;
q=new nod;
q->v=i;
q->urm=p[y];
p[y]=q;
}
}
for (i=1;i<=m;i++) {
fscanf(f,"%d %d",&aa,&bb);
qq=new cer;
qq->poz=i;
qq->str=bb;
qq->urm=u[aa];
u[aa]=qq;
}
for (i=1;i<=n;i++)
if (t[i]==0) {
parc(i,1);
r=i;
}
fclose(f);
/* for (i=1;i<=n;i++)
t[i]==0;*/
// parc(r,1);
FILE *g = fopen("stramosi.out","w");
for (i=1;i<=m;i++){
fprintf(g,"%d\n",rez[i]);
}
fclose(g);
return 0;
}