ABC012D
D - バスと避けられない運命
https://gyazo.com/ee05f83557e61f16cca327eded5de119
考えたこと
最も遠い頂点までの距離が最小になる点を選んだ時の、その距離を求める問題だと
グラフの半径だね
全方位木DPで求めるんだったかな
そんな難しいことをこの難易度で聞かれるかな
あっ、これ木じゃないぞ?
ワーシャルフロイド法でO(V^3)か
Vは300なので間に合う?
公式解説
ダイクストラ法O(V^2)をV回やるかワーシャルフロイド
「ただしPythonなどの遅い言語では通らないことが検証済み」(ええー)
ダイクストラをO((E+V)log V)でやる案
これ試してみよう
PythonでもあっさりACしました
5秒制限のところ1.4秒
6年前の問題だからジャッジマシンが早くなったのかな?
それとも「通らないことが検証済み」ってのはV^3の解法のことかな
code:python
def solve(N, M, edges):
INF = 9223372036854775807
ret = INF
for start in range(N):
distances = INF * N
distancesstart = 0
queue = (0, start)
while queue:
d, frm = heappop(queue)
if distancesfrm < d:
# already know shorter path
continue
for to in edgesfrm:
new_cost = distancesfrm + edgesfrmto
if distancesto > new_cost:
# found shorter path
distancesto = new_cost
heappush(queue, (distancesto, to))
ret = min(ret, max(distances))
return ret