SoundHound Inc. Programming Contest 2018 -Masters Tournament- D問題 Saving Snuuk
コンテスト中に解けなかったので記録.
問題概要
頂点本の辺からなる無向グラフが与えられる。
頂点から頂点に移動するとき、1回だけ両替所の存在する頂点で円→スヌークへ全額両替する。
この時かかる金額(円+スヌーク)の最小値を求めたい。
初期状態として各頂点に両替所が存在するが,年後には頂点の両替所は閉鎖され以降使用不可。
考えたこと
とりあえず、頂点から頂点への最小コストを求めたいので、円とスヌークをそれぞれ重みとしたダイクストラをやるのかと思った...がそこから考えが進まず、コンテスト終了。
これって年後を考えると両替できるのが頂点だけで、これは「円でダイクストラをした時の頂点から頂点へのコストと、スヌークでダイクストラをした時の頂点から頂点へのコストの和」でも求まるんですよね。
で年後は年後か同様に「円でダイクストラをした時の頂点から頂点へのコストと、スヌークでダイクストラをした時の頂点から頂点へのコストの和」の最小値を取ればいいんですよ。
ということは年後から年後に向かって累積minを求めれば年後について全て求まるんですね。
提出コード:
Submission #2811840 - SoundHound Inc. Programming Contest 2018 -Masters Tournament-
学んだこと
問題の言い換えは大切(年後に頂点の両替所が廃止/設立)
比較する候補が少ない状態(使用可能な両替所の数)から多くなる方向に考えを巡らせることは典型らしいので身に付けたいね。