Python/최단경로
[Algorithm] 프로그래머스 1238 파티 | 파이썬 (다익스트라)
유일리
2024. 9. 5. 17:16
※ 1238 파티
https://www.acmicpc.net/problem/1238
문제 해결 TIP
최단경로 문제와 동일한 다익스트라 알고리즘으로 구현한다. 이때, 시작 노드가 고정된 오는 길 뿐만 아니라 가는 길도 계산해야 함으로, 추가해준다.
전체 코드
import sys
import heapq
input = sys.stdin.readline
INF = int(1e9)
def dijkstra(start):
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 cost < distance[i[0]] :
distance[i[0]] = cost
heapq.heappush(q,(cost,i[0]))
N, M, X = map(int,input().split())
answer = []
graph = [[] for _ in range(N+1)]
distance = [INF] * (N+1)
#연결 정보 입력
for _ in range(M):
u,v,w = map(int,input().split())
graph[u].append((v,w))
#오는 길 최단경로값 정보 리스트
dijkstra(X)
for i in range(1,N+1):
answer.append(distance[i])
#가는 길 최단경로값 정보 리스트
for i in range(1,N+1):
distance = [INF] * (N + 1)
dijkstra(i)
answer[i-1] += distance[X]
print(max(answer))