동까의 코딩

99클럽 코테 스터디 5일차 TIL 본문

문제 풀이/99클럽

99클럽 코테 스터디 5일차 TIL

동까의 코딩 2025. 1. 20. 21:58
반응형

https://www.acmicpc.net/problem/1504

 

최단경로를 푸는 문제이고, 최단경로 코드를 참고하였습니다.

 

내일 또 다시 풀어볼 예정입니다.

 

import heapq
import sys
input = sys.stdin.readline
INF = int(1e9)

v, e = map(int, input().split())
graph = [[] for _ in range(v + 1)]


for _ in range(e):
    x, y, cost = map(int, input().split())
    graph[x].append((y, cost))
    graph[y].append((x, cost))


def dijkstra(start):
    distance = [INF] * (v + 1)
    q = []
    heapq.heappush(q, (0, start))
    distance[start] = 0

    while q:
        dist, now = heapq.heappop(q)

        if distance[now] < dist:
            continue

        for i in graph[now]:
            cost = dist + i[1]

            if distance[i[0]] > cost:
                distance[i[0]] = cost
                heapq.heappush(q, (cost, i[0]))

    
    return distance


v1, v2 = map(int, input().split())


original_distance = dijkstra(1)
v1_dis = dijkstra(v1)
v2_dis = dijkstra(v2)

v1_path = original_distance[v1] + v1_dis[v2] + v2_dis[v]
v2_path = original_distance[v2] + v2_dis[v1] + v1_dis[v]

result = min(v1_path, v2_path)
print(result if result < INF else -1)
반응형