Cod sursa(job #472618)

Utilizator marius.bucurBucur Marius - Ovidiu marius.bucur Data 25 iulie 2010 21:00:20
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<cstdio>
#include<cstdlib>
#include<map>

#define MAX_N 320002
#define LOG_MAX_N 16
#define MAX_INTREBARI 320002

int stramosi[MAX_N][LOG_MAX_N];
int intrebari_s[MAX_INTREBARI];
int intrebari_r[MAX_INTREBARI];

int get_stramos(int s, int r)
{
	int i = 0;
	while(r)
	{
		if(r % 2)
		{
			s = stramosi[s][i];
		}
		r /= 2;
		i++;
	}
	return s;
}

int build_ances_matrice(int N)
{
	int i = 0, j = 0;
	for(i = 1; i < LOG_MAX_N; i++)
	{
		for(j = 1; j <= N; j++)
		{
			stramosi[j][i] = stramosi[stramosi[j][i-1]][i-1];
		}
	}
	return i;
}

int main()
{
	int i = 0, M,N;
	FILE* f = fopen("stramosi.in", "r");
	fscanf(f, "%d %d", &N, &M);
	for(; i < N; i++)
	{
		int ch;
		fscanf(f, "%d", &ch);
		stramosi[i+1][0] = ch;
	}
	for(i = 0; i < M; i++)
	{
		fscanf(f, "%d %d", &intrebari_s[i+1], &intrebari_r[i+1]);
	}
	fclose(f);
	build_ances_matrice(N);
	f = fopen("stramosi.out", "w");
	for(i = 1; i <= M; i++)
		fprintf(f, "%d\n", get_stramos(intrebari_s[i], intrebari_r[i]));
	fclose(f);
	return 0;
}