Cod sursa(job #2276442)

Utilizator figure0907Andrei Gonczi figure0907 Data 4 noiembrie 2018 18:51:52
Problema Stramosi Scor 50
Compilator py Status done
Runda Arhiva de probleme Marime 0.99 kb
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):
    while y:
        maxpow = 1
        pow = 0
        while maxpow <= y:
            maxpow *= 2
            pow += 1
        maxpow = int(maxpow/2)
        pow -= 1
        x = a[x-1][pow]
        if x == 0:
            return 0
        y -= maxpow
    return x

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()