on
[백준] 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