[백준] 10217번 : KCM Travel [파이썬]

[백준] 10217번 : KCM Travel [파이썬]

import sys

input = sys . stdin . readline

INF = int ( 1e9 )

t = int ( input ())

for _ in range ( t ):

n , m , k = map ( int , input (). split ()) # 공항수, 지원비용, 티켓 정보갯수

graph =[[] for _ in range ( n + 1 )]

for _ in range ( k ):

u , v , c , d = map ( int , input (). split ()) # 출발,도착,티켓비용,거리

graph [ u ]. append (( v , c , d )) # 도착공항,티켓비용,거리

dp =[[ INF for _ in range ( m + 1 )] for _ in range ( n + 1 )] # 초기값 INF로 설정

dp [ 1 ][ 0 ]= 0 # 1번에서 1번으로 가는 거리,티켓은 0

for i in range ( m + 1 ):

for j in range ( n + 1 ):

if dp [ j ][ i ]== INF : # 해당 노드가 방문처리가 안되있으면 무시

continue

# 아래부터는 해당 노드에 값이 있는 경우이다.

cost = dp [ j ][ i ] # j노드를 i 비용으로 갈수있는 최단시간 = cost

for k in graph [ j ]:

arr , ticket , dist = k # 도착노드, 티켓비용, 시간

if i + ticket > m : # 주어진 비용보다 비싸면 무시

continue

# 더 작은 값으로 초기화

dp [ arr ][ i + ticket ]= min ( dp [ arr ][ i + ticket ], cost + dist )

result = min ( dp [ n ]) # 도착 노드인 N에서 비용이 얼마가들던 최단시간이 정답이다.

if result == INF :

print ( 'Poor KCM' )

else :

print ( result )

from http://20210916start.tistory.com/81 by ccl(A) rewrite - 2021-09-27 07:26:57