Cod sursa(job #79478)

Utilizator coderninuHasna Robert coderninu Data 22 august 2007 17:51:34
Problema Stramosi Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <stdio.h>
#include <stdlib.h>
#define infile "stramosi.in"
#define outfile "stramosi.out"
#define nmax 250001

long n, m, c[nmax], i, q, p, j;
int *v[nmax];

int main()
{
 int temp;
 freopen(infile, "r", stdin);
 freopen(outfile, "w", stdout);
 scanf("%ld %ld\n", &n, &m);
 for (i=1; i<=n; i++)
     {
      scanf("%ld ", &c[i]);
      v[i]=(int *)calloc(1, sizeof(int));
     }
 for (i=1; i<=n; i++)
     {
      j=i;
      while(c[j])
	  {
	   if (v[c[j]][0])
	       {
		v[i]=(int *)realloc(v[i], (v[i][0]+v[c[j]][0]+3)*sizeof(int));
		v[i][++v[i][0]]=c[j];
		for (long k=1; k<=v[c[j]][0]; k++)
		    v[i][v[i][0]+k]=v[c[j]][k];
                v[i][0]+=v[c[j]][0];
		break;
	       }
	   else
	       {
		v[i][++v[i][0]]=c[j];
		j=c[j];
	       }
	  }
     }
 for (i=1; i<=m; i++)
     {
      scanf("%ld %ld\n", &q, &p);
      if (v[q][0]>=p)
	  printf("%ld\n", v[q][p]);
      else
          printf("0\n");
     }
 fclose(stdin);
 fclose(stdout);
 return 0;
}