1 of 8

切符分割

原案 松岡

2 of 8

問題概要

・駅の間の距離と、運賃表が与えられます。

・切符を2枚まで購入することで達成できる、最も安い交通費を求めてください。

3 of 8

部分点 分割なし 想定解法

・部分点1は切符の分割がありません。

・N、Mの制約も小さいので、お好きな方法で、S-Gの最短距離を求めてください。

(ワーシャルフロイド、ベルマンフォード、ダイクストラ)

4 of 8

部分点 N,Mの制約が小さい

・1.ワーシャルフロイドなどで、全点間の最短距離を求める

・2.d(i,j)をi番目の駅からj番目の駅までの距離としたとき、すべてのiについて、

ans = min(cost(d(s,i))+cost(d(i,g)))

・2に気が付ければこの部分点までは獲得できるはず

5 of 8

満点解法

・ワーシャルフロイドでは間に合いません。

・負の辺は存在しないのでダイクストラを使いたい。

・ほしい距離は、始点からの距離と、終点からの距離の二つだけ。

6 of 8

満点解法

・ダイクストラを 始点→途中→終点とやると、すべての駅についてダイクストラをしなければならないが、 始点→途中 と 途中←終点とすると、始点と終点の二つから探索すればよい。

・計算は二倍にしかならないので、計算量としては無視できる

7 of 8

満点解法について

・幅優先探索でも似たようなことができる場面があります。

(ダイクストラと幅優先はコードも似た感じで書けますしね)

8 of 8

元ネタ

・JRの運賃

・久留米から香椎まで行く場合、天拝山で一度� 降りると10円安くなります(2014/03/28現在)

・テストケースにも同じものを含めました