문제
풀이
- n명의 학생이 x번 마을에 모여살고 m개의 단방향 도로들이 있으며 i번째 길을 지나는데 t의 시간을 소비한다.
- n명의 학생들 중 오고 가는데 가장 오래 걸리는 학생의 소요시간을 출력하라
- 각 노드, 간선, 소요시간이 주어지며 최장거리를 찾아야하는 문제로
최단(최장) 거리
알고리즘 문제이다.
- 변수의 범위가 5000을 넘으므로
플로이드 워셜
보다는 다익스트라 알고리즘
이 더 효율적일거라 판단되어 다익스트라 알고리즘
으로 접근했다.
코드
import heapq
import sys
input = sys.stdin.readline
inf = int(1e9)
def dijkstra(start: int) -> list:
distance = [inf] * (n + 1)
queue = []
heapq.heappush(queue, (0, start))
distance[start] = 0
while queue:
dist, now = heapq.heappop(queue)
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(queue, (cost, i[0]))
return distance
def solve() -> int:
result = 0
for i in range(1, n + 1):
result = max(result, dijkstra(i)[x] + dijkstra(x)[i])
return result
if __name__ == '__main__':
n, m, x = map(int, input().split())
graph = [[] for _ in range(n+1)]
for _ in range(m):
a, b, t = map(int, input().split())
graph[a].append([b, t])
print(solve())
결과
출처 & 깃허브
BOJ 1238
GITHUB