BOJ 1238チーム
8545 ワード
https://www.acmicpc.net/problem/1238
時間1秒、メモリ128 MB
input : N M X (1 ≤ X <= N ≤ 1,000)(1 ≤ M ≤ 10,000) u v c (1 <= c <= 100) output : 出力 条件:
起点と一つの都市Aから別の都市Bへの道路は最大1本である.
これらの学生はもともと怠け者で,最短時間で行き来したいと思っている.
これらの道路は一方通行である
問題をよく読んでいないことだけを議論した.そして、すべての村を計算するよりも良い方法を見つけなければなりません.
行き交い、 が要求する目的地X Xを計算するには、Xから来たのです.
複数のカーブを使用して最短距離を求める
Xから他の村に戻るすべての状況を元の方向に計算することができます.
幹線の方向を反転させると、その村->Xのすべての状況を計算することができる.もちろん,Xから他の村までの場合,計算した値は同じ結果を得た.
だから2番はすべてExpstraをして、相応の配列を合わせて、それから最低価格を探せばいいです.
時間1秒、メモリ128 MB
input :
起点と一つの都市Aから別の都市Bへの道路は最大1本である.
これらの学生はもともと怠け者で,最短時間で行き来したいと思っている.
これらの道路は一方通行である
次の解
複数のカーブを使用して最短距離を求める
Xから他の村に戻るすべての状況を元の方向に計算することができます.
幹線の方向を反転させると、その村->Xのすべての状況を計算することができる.もちろん,Xから他の村までの場合,計算した値は同じ結果を得た.
だから2番はすべてExpstraをして、相応の配列を合わせて、それから最低価格を探せばいいです.
import sys
from heapq import heappop, heappush
def dijkstra(graph):
q = []
heappush(q, (0, x))
dist = [float("inf")] * (n + 1)
dist[x] = 0
while q:
cost, node = heappop(q)
if cost > dist[node]:
continue
for next_cost, next_node in graph[node]:
temp = next_cost + cost
if dist[next_node] > temp:
dist[next_node] = temp
heappush(q, (temp, next_node))
return dist
n, m, x = map(int, sys.stdin.readline().split())
original, reverse = [[] for _ in range(n + 1)], [[] for _ in range(n + 1)]
for _ in range(m):
u, v, c = map(int, sys.stdin.readline().split())
original[u].append((c, v))
reverse[v].append((c, u))
ori_dist = dijkstra(original)
rev_dist = dijkstra(reverse)
for i in range(n + 1):
ori_dist[i] += rev_dist[i]
print(max(ori_dist[1:]))
Reference
この問題について(BOJ 1238チーム), 我々は、より多くの情報をここで見つけました https://velog.io/@jsin2475/BOJ-1238-파티テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol