[python]1516号
1704 ワード
1. building_list 에 전부 담는다
2. 하나씩 확인한다 time(n): n번째 건물의 짓는 시간을 리턴
i 번째 요소 :
while 선수 건물 넘버n 확인 -> n 번째 요소의 선수 건물 넘버 k 확인 -> k 번째 요소의 선수 건물 넘버
for 리스트 돌리기:
if 선수 건물 x :
n 번째 요소의 시간 더한다
elif 선수 건물 이 요소는 전에 지었다:
if 이요소가 리스트의 마지막 요소가 아니다 :
넘어간다
else 이요소가 리스트의 마지막 요소이다:
더한다.
else 안지은 건물이 선수 건물이다 :
for n 번째 요소의 선수 건물 리스트 하나씩 돌리기 :
if 선수 건물 x 또는 선수 건물을 이미 지었다 :
k 번째 요소의 시간 더한다
else 안지은 건물이 선수 건물이다 :
for k 번째 요소의 선수 건물 리스트 하나씩 돌리기 :
if 선수 건물 x 또는 선수 건물을 이미 지었다 :
k 번째 요소의 시간 더한다
else 안지은 건물이 선수건물이다 :
for
import sys
N= int(sys.stdin.readline())
building_list=[]
for _ in range(N):
building = list(sys.stdin.readline().split())
time = int(building[0])
pre = list(map(int,building[1:-1]))
building = (time,pre)
building_list.append(building)
def function(n,i): #n번째 건물 , 그건물의 선수건물 리스트 i
sum = building_list[n-1][0]
list =[]
if len(i)==0:
return sum
for k in i:
if k in list:
if k != i[-1]:
continue
else:
sum += building_list[k-1][0]
list.append(k)
return sum
else:
sum += function(k,building_list[k-1][1])
return sum
for i in range(1,N+1):
print(function(i,building_list[i-1][1]))
サンプルコードは正しいが表示が間違っている...アルゴリズムの分類は位相の位置合わせです!
注記計算されたサブツリーを再書き込みする->時間の節約
0の場合
直接木を1本描く
学識
Reference
この問題について([python]1516号), 我々は、より多くの情報をここで見つけました https://velog.io/@rkdud007/Python-1516번テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol