AtCoder上にある問題のうち、AtCoder Problemsでdiff 800以上と判定されているものを順番に解いていく企画。
基本的な考え方は全てコード中のコメントに入れてあるので、参照のこと。
出典:
AtCoder Beginner Contest 026 C – 高橋君の給料
木の頂点をたどりながら、数値を計算していく問題。
下から順番に給料を決めていってもいいが、再帰関数を用いる方が簡単に書けるだろう。今回は構造が木&求めるのが高橋君の給料のみのため、特にメモ化なども行っていない。
def main():
N = int(input())
path_dat = [int(input()) for _ in range(N-1)]
paths = [[] for _ in range(N+1)]
for i, boss in enumerate(path_dat, start=2):
paths[boss].append(i)
def get_payment(idx):
if paths[idx] == []:
return 1
staff_payments = [get_payment(p) for p in paths[idx]]
return min(staff_payments) + max(staff_payments) + 1
print(get_payment(1))
main()
関連