Pagini recente » Cod sursa (job #2822412) | Cod sursa (job #1837789) | Cod sursa (job #797771) | Cod sursa (job #882839) | Cod sursa (job #5481)
Cod sursa(job #5481)
#include<stdio.h>
#include<stdlib.h>
#define maxn 250001
int n, nrq, *a[maxn], *rad, xx[maxn], nr, rez[maxn+50000];
struct nod { int val; int ord; } ;
struct intreb {
int nr;
nod *a;
} q[maxn];
bool viz[maxn];
void BFS(int k)
{
viz[k]=1;
while( q[k].nr ) {
if( nr- q[k].a[ q[k].nr].val) rez[ q[k].a[ q[k].nr].ord]= xx[nr- q[k].a[ q[k].nr].val];
else rez[ q[k]. a[ q[k].nr].ord]= 0;
q[k].nr--;
}
for(int i=1; i<=a[k][0]; ++i) if(!viz[a[k][i]]) {
xx[++nr]= a[k][i];
BFS(a[k][i]);
}
nr--;
}
int main()
{
int i, x, y;
FILE *f=fopen("stramosi.in","r");
fscanf(f,"%d %d",&n,&nrq);
for(i=0; i<=n+2; ++i) {
a[i]=(int*)malloc(sizeof(int));
a[i][0]=0;
}
rad=(int*)malloc(sizeof(int));
rad[0]=0;
for(i=1; i<=n; ++i) {
fscanf(f,"%d",&x);
a[x][0]++;
a[x]=(int*)realloc(a[x], sizeof(int)*(a[x][0]+2));
a[x][ a[x][0]]= i;
if(!x) {
rad[0]++;
rad=(int*)realloc(rad, sizeof(int)*(rad[0]+2));
rad[ rad[0]]= i;
}
}
for(i=1; i<=nrq; ++i) {
fscanf(f,"%d %d",&x,&y);
if( !q[x].nr) {
q[x].nr++;
q[x].a=(nod*)malloc(sizeof(nod)*2);
q[x].a[ q[x].nr].val=y;
q[x].a[ q[x].nr].ord=i;
}
else {
q[x].nr++;
q[x].a=(nod*)realloc(q[x].a, sizeof(nod)*(q[x].nr+2));
q[x].a[ q[x].nr].val=y;
q[x].a[ q[x].nr].ord=i;
}
}
fclose(f);
for(i=1; i<=rad[0]; ++i) {
nr=1;
xx[nr]=rad[i];
BFS( rad[i]);
}
FILE *g=fopen("stramosi.out","w");
for(i=1; i<=nrq; ++i) fprintf(g,"%d\n",rez[i]);
fclose(g);
return 0;
}