728x90
https://www.acmicpc.net/problem/1238
알고리즘 설명
문제 설명
단방향 그래프에서 최단경로를 찾는 문제
최단 경로의 값을 모두 구하고 그 중에 최댓값을 찾는다.
코드 설명
사람 별로 파티장까지 갔다가 돌아오는 길의 최단경로를 찾는다.
최단경로의 경로길이들의 최댓값을 갱신한다.
import sys
from heapq import heappop, heappush
input = sys.stdin.readline
inf = 1e10
n, m, x = map(int, input().split())
arr = [[] for _ in range(n + 1)]
# 최단경로구하기
def sol(start, end):
dp = [inf for _ in range(n + 1)]
dp[start] = 0
q = []
heappush(q, (0, start))
while q:
time, now = heappop(q)
if dp[now] < time:
continue
for tmp, next in arr[now]:
if tmp + time < dp[next]:
dp[next] = tmp + time
heappush(q, (tmp + time, next))
return dp[end]
# 도로 정보
for _ in range(m):
s, e, t = map(int, input().split())
arr[s].append([t, e])
res = 0
# 모든 학생에 대해 계산
for i in range(1, n + 1):
res = max(res, sol(i, x) + sol(x, i))
print(res)
반응형
'백준 문제풀이 코드저장소 > Gold' 카테고리의 다른 글
Baekjoon 31963. 두 배 / Java, Python (1) | 2024.07.08 |
---|---|
Baekjoon 1865. 웜홀 / Python (2) | 2024.07.04 |
Baekjoon 23295. 스터디 시간 정하기 1 / Python (0) | 2024.07.04 |
Baekjoon 11779. 최소비용 구하기 2 / Python (0) | 2024.07.04 |