Pagini recente » Cod sursa (job #772069) | Cod sursa (job #1131187) | Istoria paginii runda/ojipreg | Cod sursa (job #1718806) | Cod sursa (job #1487302)
#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;
}