728x90
반응형
문제 요약
- 알고리즘 분류: 다익스트라
- 난이도: Gold5
- 문제내용:
- 각 노드에서 X까지 시작점 부터 도착점 왕복하는데 걸리는 최대 시간을 구해라
1238번: 파티
첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어
www.acmicpc.net
문제풀이
이번에는 문제 유형은 그래프 탐색중에 다익스트라 알고리즘 문제이다. 다익스트라 알고리즘 기본적인것을 묻기 때문에 자세한 설명은 여기서 참조하면된다. 풀이에 대한 설명은 각 노드에서 X까지 출발점 부터 도착점 까지 왕복 하는데 걸리는 시간을 다익스트라 알고리즘을 출발점 → 도착점, 도착점 → 출발점을 구해서 더하기만 하면되기 때문에 다익스트라 알고리즘알면 풀수 있기때문에 따로 설명은 하지 않겠다.
Code
Python
import sys, heapq
input = sys.stdin.readline
INF = 1e9
def dijkstra(start, end):
distances = [INF] * (N + 1)
distances[start] = 0
queue = [(0, start)]
while queue:
now_distance, now_node = heapq.heappop(queue)
if now_distance > distances[now_node]: continue
for node, weight in grape[now_node]:
distance = now_distance + weight
if distances[node] > distance:
distances[node] = distance
heapq.heappush(queue, (distance, node))
return distances[end]
N, M , X = map(int, input().split())
grape = {i: [] for i in range(1, N + 1)}
for _ in range(M):
a, b, T = map(int, input().split())
grape[a].append([b, T])
max_distance = 0
for i in range(1, N + 1):
max_distance = max(dijkstra(X, i) + dijkstra(i, X), max_distance)
print(max_distance)
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[BAEKJOON]9935 문자열 폭발 - Python (0) | 2023.01.19 |
---|---|
[BAEKJOON]1504 특정한 최단 경로 (0) | 2023.01.17 |
[BAEKJOON]1916 최소비용 구하기 - Python (0) | 2023.01.13 |
[BAEKJOON]15686 치킨 배달- Python (0) | 2023.01.12 |
[BAEKJOON]14502 연구소 - Python (0) | 2023.01.11 |