반응형
https://www.acmicpc.net/problem/5590
소스코드
import sys
import heapq as hq
input = sys.stdin.readline
def dijkstra(start):
q = []
min_dis = [float('inf') for _ in range(n+1)]
min_dis[start] = 0
hq.heappush(q,[0,start])
while q:
cur_dis,cur_node = hq.heappop(q)
if min_dis[cur_node] < cur_dis:
continue
for next_node,next_dis in graph[cur_node]:
if min_dis[next_node] > next_dis + cur_dis:
min_dis[next_node] = next_dis + cur_dis
hq.heappush(q,[next_dis+cur_dis,next_node])
return min_dis
n,m = map(int,input().split())
graph = [[] for _ in range(n+1)]
for _ in range(m):
a = list(map(int,input().split()))
if a[0] == 0:
k = dijkstra(a[1])
if k[a[2]] == float('inf'):
print(-1)
else:
print(k[a[2]])
elif a[0] == 1:
graph[a[1]].append([a[2],a[3]])
graph[a[2]].append([a[1],a[3]])
풀이
★ 문제가 일본어로 되어있어서 파파고로 번역해서 풀었습니다 !! 먼저 문제를 선택한 이유는 다익스트라 구현을 똑같지만, 입력 값으로 0 or 1이 들어왔을 때, 그 값대로 수행해야 하는 조건이 다르다는 점이 새로웠습니다.
★ 0이 들어오면 기존에 존재하는 그래프만으로 다익스트라를 수행하여 결과값을 도출하면 되고, 1이 들어올 경우 그래프를 새롭게 갱신한 뒤, 이 후에 0이 들어올 때 갱신된 그래프를 기준으로 답을 도출해야 합니다 :)
반응형
'Algorithm > 백준' 카테고리의 다른 글
[백준 알고리즘] 11659번: 구간 합 구하기 4 (JAVA) (0) | 2024.01.16 |
---|---|
[백준 알고리즘] 30974번: What's your ETA? (Python) (2) | 2024.01.11 |
[백준 알고리즘] 2002번: 추월 (Python) (0) | 2023.12.19 |
[백준 알고리즘] 13911번: 집 구하기 (Python) (1) | 2023.12.18 |
[백준 알고리즘] 14618번: 총깡 총깡 (Python) (1) | 2023.12.09 |