AtCoder Beginner Contest 270 F問題 Transportation
問題
提出解答
問題の概要
AtCoder 国は 個の島からなる島国である. 最初, どの島にも空港, 港はなく, どの2つの島の間にも道路はない.
次のことをそれぞれ好きなだけ行うことができる.
- なる整数 を選び, 円支払って 島 に空港を建設する.
- なる整数 を選び, 円支払って 島 に港を建設する.
- なる整数 を選び, 円支払って 島 と島 の間に道路を建設する.
以下の行動を繰り返すことによって島 から島 へ移動できるとき, 島 から島 へ移動可能であるという.
- 島 と島 ともに空港がある場合にのみ可能: 島 から島 へ移動する.
- 島 と島 ともに港がある場合にのみ可能: 島 から島 へ移動する.
- 島 と島 を直接結ぶ道路がある場合にのみ可能: 島 から島 へ移動する.
任意の2つの島の間を移動可能にするために必要な最小費用を求めよ.
制約
解法
次のような (重み付き) 無向グラフ を考える. ただし, は形式的につける頂点とする *1.
このようにすることで, それぞれ以下が成り立つ.
- 空港を利用して島 から島 へ直接移動可能 .
- 港を利用して島 から島 へ直接移動可能 .
よって, この問題は において頂点 を連結にするために必要な残す辺の重みの総和の最小値を求める問題に帰着された. ここで, 頂点 に対する連結性については言及されていないことから, 通りの場合分けをすることにする.
すると, 各問題は次のようにして帰着される.
- ともに頂点 と連結しない場合 無向グラフ における最小全域木問題.
- は頂点 と連結しないが, 頂点 連結する場合 無向グラフ における最小全域木問題.
- は頂点 と連結しないが, 頂点 連結する場合 無向グラフ における最小全域木問題.
- ともに頂点 と連結する場合 無向グラフ における最小全域木問題.
これら4パターンにおける最小全域木問題をとき, 最小値を答えれば良い. なお, 全域木がとれないパターンについては とすればよい.
計算量は のオーダーが , サイズが であるから, 時間である.
*1:それぞれ airport, port の頭文字