Pagini recente » Cod sursa (job #2629855) | Cod sursa (job #1415962) | Cod sursa (job #3188378) | Cod sursa (job #1422750) | Cod sursa (job #3198837)
#include <stdio.h>
#define MAXN 250000
#define LOGN 20
int ancestors[ MAXN + 1 ][ LOGN ];
int n, m;
struct question
{
int member, grade;
};
int main()
{
FILE *fin, *fout;
fin = fopen( "stramosi.in", "r" );
fscanf( fin, "%d%d", &n, &m );
for( int i = 1; i <= n; i++ )
{
fscanf( fin, "%d", &ancestors[ i ][ 0 ] );
}
for( int j = 1; j < LOGN; j++ )
{
for( int i = 1; i <= n; i++ )
{
ancestors[ i ][ j ] = ancestors[ ancestors[ i ][ j - 1 ] ][ j - 1 ];
}
}
fout = fopen( "stramosi.out", "w" );
question q;
for( int i = 0; i < m; i++ )
{
fscanf( fin, "%d%d", &q.member, &q.grade );
int power = 0;
while( q.grade > 0 )
{
if( q.grade % 2 == 1 )
{
q.member = ancestors[ q.member ][ power ];
}
power++;
q.grade /= 2;
}
fprintf( fout, "%d\n", q.member );
}
fclose( fin );
fclose( fout );
return 0;
}