반응형
https://www.acmicpc.net/problem/1238
import collections
import heapq
n, m, x = map(int, input().split())
graph = collections.defaultdict(list)
for i in range(m):
u,v,w = map(int, input().split())
graph[u].append([v,w])
# go back to home
start = [0,x] # cost, node
dist = {}
q = []
heapq.heappush(q, start)
while q:
cost, node = heapq.heappop(q)
if node not in dist:
dist[node] = cost
for next, w in graph[node]:
heapq.heappush(q, [w+cost, next])
# go to party
for i in range(1,n+1):
if i == x:
continue
start = [0, i] # cost, node
dist2 = {}
q = []
heapq.heappush(q, start)
while q:
cost, node = heapq.heappop(q)
if node not in dist2:
dist2[node] = cost
if node == x: # stop
break
for next, w in graph[node]:
heapq.heappush(q, [w + cost, next])
dist[i] += dist2[x]
print(max(dist.values()))
다익스트라로 풀 수 있다.
a->b->a 의 최단 경로 중 가장 큰 값을 찾는 것이므로 간략히 하자면
다익스트라 결과 두 개를 더해주면 된다.
댓글