Cod sursa(job #1487302)

Utilizator robert.ologuOlogu Robert-Leonard robert.ologu Data 16 septembrie 2015 17:26:39
Problema Stramosi Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <stdio.h>
#include <stdlib.h>

#define FILE_IN  "stramosi.in"
#define FILE_OUT "stramosi.out"

#define MAX_MEMBERS 	250000
#define MAX_QUESTIONS 	300000

typedef struct q
{
	int Q;
	int P;
} question_t;

int main(int argc, char **argv)
{
	int i, j, ii, jj;
	int P, Q, S;
	int numMembers, numQuestions;
	int **parent;
	
	question_t questions[MAX_QUESTIONS];
	int result[MAX_QUESTIONS];
	
	FILE* fIn  = fopen(FILE_IN, "r");
	FILE* fOut = fopen(FILE_OUT, "w");
	
	fscanf(fIn, "%d %d", &numMembers, &numQuestions);
		
	if(numMembers > MAX_MEMBERS)
		return 1;
	
	parent = (int**)malloc((MAX_MEMBERS+1)*sizeof(int*));
	for(i=0; i<(MAX_MEMBERS+1); ++i)
		parent[i] = (int*)malloc((MAX_MEMBERS+1)*sizeof(int));
	
//	for(i=1; i<numMembers+1; ++i)
//		for(j=1; j<numMembers+1; ++j)
//			parent[i][j] = 0;
	
	for( i=1; i<numMembers+1; ++i)
		fscanf(fIn, "%d", &(parent[1][i]));
	
	for(i=0; i<numQuestions; ++i)
		fscanf(fIn, "%d %d", &(questions[i].Q), &(questions[i].P));
	
	for( i=0; i<numQuestions; ++i)
	{
	//	fscanf( fIn, "%d %d", &Q, &P);
		P = questions[i].P;
		Q = questions[i].Q;

		if(parent[P][Q] == 0)
		{
			S = Q;
			for(j=0; j<P; ++j)
				S = parent[1][S];
			parent[P][Q] = S;
			result[i] = S;
		}
		else
		{
			result[i] = parent[P][Q];
		}
	}
	
	for(i=0; i<numQuestions; ++i)
		fprintf(fOut, "%d\n", result[i]);
	
	fclose(fIn);
	fclose(fOut);
	
	return 0;
}