코딩테스트/백준 (python)
백준 / 1238번 / 파티 / python 파이썬
seulll
2025. 3. 7. 21:27
문제 : https://www.acmicpc.net/problem/1238
나의 풀이
import heapq
def dijkstra(start):
distances = [float('inf')] * (N + 1)
distances[start] = 0
pq = []
heapq.heappush(pq, (0, start))
while pq:
dist, now = heapq.heappop(pq)
if distances[now] >= dist:
for next_node, time in graph[now]:
if dist + time < distances[next_node]:
distances[next_node] = dist + time
heapq.heappush(pq, (dist + time, next_node))
return distances
N, M, X = map(int, input().split())
graph = [[] for _ in range(N + 1)]
for _ in range(M):
a, b, time = map(int, input().split())
graph[a].append((time, b))
distances_from_X = dijkstra(X)
for i in range(1, N + 1):
if i != X:
reverse_distances = dijkstra(i)
distances_from_X[i] += reverse_distances[X]
print(max(distances_from_X[1:]))
다익스트라로 최단 거리를 구해 그 중 가장 거리가 긴 값을 출력한다.