Pagini recente » Cod sursa (job #718809) | Cod sursa (job #300381) | Cod sursa (job #258815) | Cod sursa (job #500498) | Cod sursa (job #3686)
Cod sursa(job #3686)
#include <stdio.h>
#include <stdlib.h>
#define INF "stramosi.in"
#define OUF "stramosi.out"
#define NMAX 262144
int st[NMAX],sol[300001];
struct nod
{
int c;
nod *next;
};
struct nod2
{
int c,poz;
nod2 *next;
}*pr;
struct head
{
nod *p,*q;
}la[NMAX];
struct head2
{
nod2 *p,*q;
}lk[NMAX];
void dfs(nod *p,int k)
{
while(p!=NULL)
{
st[k]=p->c;
pr=lk[p->c].p;
//printf("%d\n",st[k]);
while(pr!=NULL)
{
// printf("%d ",pr->c);
if(k>=pr->c) sol[pr->poz]=st[k-(pr->c)];//warning
else sol[pr->poz]=0;
pr=pr->next;
}
//printf("\n");
dfs(la[p->c].p,k+1);
p=p->next;
}
}
void tipar(nod2 *p)
{
while(p!=NULL) {printf("%d_%d ",p->c,p->poz);p=p->next;}
printf("\n");
}
int main()
{
int i,n,m,x,k;
nod *op;
nod2 *po;
FILE *in,*out;
in=fopen(INF,"r");
out=fopen(OUF,"w");
fscanf(in,"%d %d",&n,&m);
for(i=1;i<=n;i++) {la[i].p=la[i].q=NULL;lk[i].p=lk[i].q=NULL;}
for(i=1;i<=n;i++)
{
op=new nod;
op->next=NULL;fscanf(in,"%d",&x);
op->c=i;
if(la[x].p==NULL){la[x].p=la[x].q=op;}
else {la[x].q->next=op;la[x].q=op;}
}
for(i=1;i<=m;i++)
{
fscanf(in,"%d %d",&x,&k);
po=new nod2;
po->next=NULL;po->c=k;po->poz=i;
if(lk[x].p==NULL){lk[x].p=lk[x].q=po;}
else {lk[x].q->next=po;lk[x].q=po;};
}
dfs(la[0].p,1);
// for(i=0;i<=n;i++) tipar(lk[i].p);
for(i=1;i<=m;i++) fprintf(out,"%d\n",sol[i]);
fclose(in);fclose(out);
return 0;
}