문제 출처 : www.acmicpc.net/problem/1238
문제 해석 : 어떤 정점에서 한 정점으로 왕복하는 거리가 가장 먼 것을 찾는 문제이다. 파티를 갔다오는 사람들은 항상 최단 경로로 왕복한다고 했기 때문에 최단 경로로 특수 정점을 왕복하는 문제로 해석 가능하다.
문제 풀이 : 다익스트라 알고리즘을 통해서 문제를 풀 수 있다.
- 플루이드 워셜 문제로 풀 경우에는 10^9로 시간 복잡도가 너무 크기 때문에 시간 초과가 난다.
- 우선순위 큐를 이용한 다익스트라 알고리즘을 적용해야한다.
풀이 코드
import sys, heapq
INF = sys.maxsize
input = sys.stdin.readline
def dijkstra(start_node):
distance = [INF] * (N+1)
heap = []
heapq.heappush(heap, [0, start_node])
distance[start_node] = 0
while heap:
now_cost, node = heapq.heappop(heap)
for next_cost, next_node in graph[node]:
next_cost = next_cost + now_cost
if next_cost < distance[next_node]:
distance[next_node] = next_cost
heapq.heappush(heap, [next_cost, next_node])
return distance
N, M, X = map(int, input().split())
graph = [[] * (N+1) for _ in range(N+1)]
for i in range(M):
start, end, cost = map(int, input().split())
graph[start].append([cost,end])
answer = [0] * (N+1)
for i in range(1,N+1):
arr = dijkstra(i)
answer[i] += arr[X]
arr2 = dijkstra(X)
answer[i] += arr2[i]
print(max(answer))
author : donghak park
contact : donghark03@naver.com
## 문제의 저작권은 백준 알고리즘 사이트에 있습니다. 혹시 문제가 되는 부분이 있으면 연락 바랍니다.
'📊알고리즘, 문제풀이 > 📈문제풀이 (PS)' 카테고리의 다른 글
[알고리즘][Python] 백준 1629 곱셈 문제 풀이 (0) | 2021.01.18 |
---|---|
[알고리즘][Python] 백준 1504 특정한 최단 경로 문제 풀이 (0) | 2021.01.18 |
[알고리즘][Python] 백준 1167 트리의 지름 문제 풀이 (0) | 2021.01.17 |
[알고리즘][Python] 백준 1043 거짓말 문제 풀이 (0) | 2021.01.17 |
[알고리즘][Python] 백준 1149 RGB 거리 문제 풀이 (0) | 2021.01.17 |