Cod sursa(job #926531)

Utilizator horatiu13Horatiu horatiu13 Data 25 martie 2013 11:40:48
Problema Stramosi Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
/*
http://www.infoarena.ro/problema/stramosi
Familia lui Gigel este foarte numeroasa, avand exact N membri. 
Fiecare membru stie cine este stramosul lui direct, mai putin 
cativa membri care sunt foarte batrani si nu mai tin minte nici 
macar cine a fost stramosul lor direct. Gigel, fiind o fire 
curioasa a facut un inventar al familiei sale, in sensul ca a 
numerotat fiecare membru cu un numar distinct intre 1 si N si 
stie de asemenea pentru fiecare membru, care este stramosul lui
direct (daca acesta exista). Curiozitatea lui este si mai mare, 
in sensul ca isi pune M intrebari de forma: "Care este al P-lea 
stramos al membrului cu numarul Q?".

Scrieti un program care raspunde corect la toate cele M intrebari ale lui Gigel.

stramosi.in
13 7
0 1 2 2 4 1 6 0 8 8 10 10 12
5 2
3 2
7 1
1 3
13 3
9 2
11 1

stramosi.out
2
1
6
0
8
0
10
*/

#include<stdio.h>
#define MAX 250001
#define mMAX 300001

int T[MAX];
int n;
int m;
int p;
int q;

int stramos()
{
	for(; p && T[q]; p--, q=T[q]);
	if(p)
		return 0;
	return q;
}

void citire()
{
	FILE *g=fopen("stramosi.in", "r");
	FILE *f=fopen("stramosi.out", "w");
	fscanf(g, "%d%d", &n, &m);
	
	for(int i=1; i<=n; i++)
		fscanf(g, "%d", &T[i]);
	
	for(; m; m--)
	{
		fscanf(g, "%d%d", &q, &p);
		fprintf(f, "%d\n", stramos());
	}
	
}

int main()
{
	citire();
	return 0;
}