-
알고리즘: 백준 1238번 파티 (feat. python)알고리즘/백준(BaekJoon) 2021. 1. 11. 20:07
1238번: 파티
첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어
www.acmicpc.net
import sys import heapq read = sys.stdin.readline N, M, X = map(int, read().split()) graph = {i: []for i in range(1, N+1)} # 각 마을에서 X로 가는 방향 그래프 graph2 = {i: []for i in range(1, N+1)} # X에서 각 마을로 가는 그래프 for _ in range(M): s, e, l = map(int, read().split()) graph[e].append([s, l]) graph2[s].append([e, l]) INF = sys.maxsize dist = [0] + [INF for _ in range(N)] dist[X] = 0 hq = [] heapq.heappush(hq, [0, X]) while hq: c_w, c_n = heapq.heappop(hq) for n_n, n_w in graph[c_n]: before_weight = c_w + n_w if before_weight < dist[n_n]: dist[n_n] = before_weight heapq.heappush(hq, [before_weight, n_n]) dist2 = [0] + [INF for _ in range(N)] dist2[X] = 0 hq2 = [] heapq.heappush(hq2, [0, X]) while hq2: c_w, c_n = heapq.heappop(hq2) for n_n, n_w in graph2[c_n]: before_weight = c_w + n_w if before_weight < dist2[n_n]: dist2[n_n] = before_weight heapq.heappush(hq2, [before_weight, n_n]) max_value = 0 for i in range(1, N+1): if max_value < dist[i] + dist2[i]: max_value = dist[i] + dist2[i] print(max_value)
반응형'알고리즘 > 백준(BaekJoon)' 카테고리의 다른 글
알고리즘: 백준 13549번 숨바꼭질 (feat. python) (0) 2021.01.12 알고리즘: 백준 1504번 특정한 최단 경로 (feat. python) (0) 2021.01.12 알고리즘: 백준 1261번 알고스팟 (feat.python) (0) 2021.01.11 알고리즘: 백준 1753번 최단경로 (feat.python) (0) 2021.01.11 알고리즘: 백준 11724번 연결 요소의 개수 (feat.python) (0) 2021.01.08