문제링크
https://www.acmicpc.net/problem/18223
코드
import heapq
input = __import__('sys').stdin.readline
v,e,p = map(int,input().split())
graph = [[]*(v+1) for _ in range(v+1)]
INF = float('inf')
for _ in range(e):
a,b,c = map(int,input().split())
graph[a].append((b,c))
graph[b].append((a,c))
def dijkstra(start):
distance = [INF for _ in range(v+1)]
distance[start] = 0
q = []
heapq.heappush(q,(0,start))
while q:
dist, node = heapq.heappop(q)
if dist>distance[node]:continue
for nextNode, nextDist in graph[node]:
cost = nextDist + dist
if cost<distance[nextNode]:
distance[nextNode] = cost
heapq.heappush(q,(cost,nextNode))
return distance
d = dijkstra(1)
a,c = d[p], d[v]
nd = dijkstra(p)
b = nd[v]
if a+b==c:print("SAVE HIM")
else:print("GOOD BYE")
문제풀이
기본적인 다익스트라에서 시작점과 끝점을 달리하여 최단거리를 구해서 풀면 된다.
민준->건우 최단거리 + 건우->마산 최단거리 == 건우-> 마산 최단거리이면, 민준이는 마산을 가면서 건우를 도와줄 수 있다.
'Koala - 11기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/python3] 1052번 : 물병 (0) | 2023.08.31 |
---|---|
[백준/Java] 4485 녹색 옷 입은 애가 젤다지? (1) | 2023.08.28 |
[백준/python] 18352번: 특정 거리의 도시 찾기 (0) | 2023.08.28 |
[백준/python] 17835 면접보는 승범이네 (0) | 2023.08.27 |
[C++] 백준 12851번: 숨바꼭질 2 (0) | 2023.08.27 |