No.1601 With Animals into Institute 解説

まだ一般公開されていません。 2021-07-10 15:00:00 +0900 JSTに公開される予定です。 ACを取っていると見ることが出来ます。

解説

無向グラフなので,街 NN を始点として,動物の居る道を既に通ったかどうかを区別して,各街への最短経路長を Dijkstra 法のような動的計画法で求めればよいです. より具体的には,各街 ii に対して,動物の居ない道のみを通る場合の最短経路長を dist(0,i)\mathrm{dist}(0, i),動物の居る道を途中で通る場合の最短経路長を dist(1,i)\mathrm{dist}(1, i) として,これらを計算して dist(1,i)\mathrm{dist}(1, i) を出力します.

初期化は dist(0,i)={0(i=N),+(iN),dist(1,i)=+\mathrm{dist}(0, i) = \begin{cases} 0 & (i = N),\\ +\infty &(i \neq N), \end{cases}\quad \mathrm{dist}(1, i) = +\infty として,全ペア (x,i)(x, i) (x{0,1}, 1iN)(x \in \{0, 1\},~1 \le i \le N)未確定とします. 各反復では,dist(x,i)\mathrm{dist}(x, i) の値が最小であるような未確定ペア (x,i)(x, i)11 つ選んで確定とし, 長さ CC の道で街 ii と結ばれた街 jj について,その道に動物が居なければ dist(x,j)min{dist(x,j),dist(x,i)+C}\mathrm{dist}(x, j) \leftarrow \min\{\mathrm{dist}(x, j),\, \mathrm{dist}(x, i) + C\} と更新し,その道に動物が居れば dist(1,j)min{dist(1,j),dist(x,i)+C}\mathrm{dist}(1, j) \leftarrow \min\{\mathrm{dist}(1, j),\, \mathrm{dist}(x, i) + C\} と更新すればよいです.

アルゴリズムの正当性は Dijkstra 法と同様に確認できます. 未確定ペアを dist(x,i)\mathrm{dist}(x, i) の値とともに管理するために優先度付きキューを用いれば,全体の計算時間は O(MlogM)\mathrm{O}(M \log M) となり,この問題が解けました.

他の解説ページへのリンク

このリンクは、ユーザーが自由に登録できるため、Writerが追加しているわけではありません。
以下のいずれかに該当するページは削除対象ですので、見つけたら報告のご協力をお願いします
将来yukicoder上でも削除申請機能を提供したいです。

  • 問題に関係ないページ
  • 問題・解説に対して、不快な文面(不快の定義は難しいので、難しい場合はアンケートなどを取る可能性はあります)

ygussanyさんが、このページの解説文を書きました。