Cod sursa(job #2276445)

Utilizator figure0907Andrei Gonczi figure0907 Data 4 noiembrie 2018 18:55:31
Problema Stramosi Scor 50
Compilator py Status done
Runda Arhiva de probleme Marime 0.89 kb
import math

infile = open("stramosi.in", "r")
outfile = open("stramosi.out", "w")

def readnm():
    line =  infile.readline().split()
    return int(line[0]), int(line[1])

def readtree():
    line = list(map(int, infile.readline().split()))
    for i in range(n):
        a[i][0] = line[i]

def get_anc(x, y):
    if x == 0:
        return 0
    if y == 0:
        return x
    p = int(math.log(y, 2))
    k = math.pow(2, p)
    return get_anc(a[x - 1][p], y-k)

def solve():
    for i in range(n):
        for j in range(1,19):
            if a[i][j-1]:
                a[i][j] = a[a[i][j-1]-1][j-1]

    for i in range(m):
        line = list(map(int, infile.readline().split()))
        outfile.write(str(get_anc(line[0], line[1])) + "\n")

    infile.close()
    outfile.close()

n, m = readnm()
a = [[0 for j in range(19)] for i in range(n)]
readtree()
solve()