문제 주소: https://www.acmicpc.net/problem/1238
난이도: gold 4
def dijkstra(start):
q = []
distance = [INF] * (N + 1) #이부분이 함수 안에 구현됐다. 여러번 돌릴예정이기 떄문
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]))
return distance #distance를 return한다. 이를통해 누가 가장 많이 걸리는지 확인할 것
ans = 0
for i in range(1,N+1):
go = dijkstra(i) #i에서 시작했을 때 각 지점들까지의 최단거리를 담은 리스트
back = dijkstra(X) # X(파티장소)에서 각 지점들까지의 최단거리를 담은 리스트
ans = max(ans, go[X] + back[i]) #i에서 X까지 최단거리 + X에서 i까지 최단거리와 기존의 ans비교
import heapq
import sys
input = sys.stdin.readline
INF = float(1e9)
N, M, X = map(int,input().split())
graph = [[]for i in range(N+1)]
for i in range(M):
a,b,cost = map(int, input().split())
graph[a].append((b,cost))
def dijkstra(start):
q = []
distance = [INF] * (N + 1)
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]))
return distance
ans = 0
for i in range(1,N+1):
go = dijkstra(i)
back = dijkstra(X)
ans = max(ans, go[X] + back[i])
print(ans)