AtCoder Beginner Contest 251 参加記録
コンテスト中AC:A〜C,E
E - Takahashi and Animals
グラフの問題として考えていたので、言い換えておきます。
頂点について、頂点と頂点の間には辺があり、そのコストはです。
ここから、以下の条件を満たすように辺をいくつか削除します。
- すべての頂点の次数が1以上
残った辺のコストの総和をスコアとする時、スコアの最小値を求めてください。
辺がある時とない時で状態が2通りしかないので、の小さい方から順にdpができないか考えます。
辺の状態がの時のスコアの最小値。但し、
の時、辺は削除されている
の時、辺は残っている
遷移について、辺番目が決定しているとして、辺を考えます。
辺を残す場合
辺は削除されていても残っていてもよいです。従って、
辺を削除する場合
辺は残っている必要があります。そうしないと、頂点の次数が0になります、従って、
このように遷移していけば解けるかのように思えますが、例えば、の時の初期値を
として、と更新していくとで困ったことになります。というのも、
辺が存在する場合でも、辺が存在しない場合には辺を残さなければならず、前述の遷移通りいきません。
これを解決するためには辺が残っているかどうかの情報があれば良いので、DPテーブルに追加します。
辺の状態がであり、かつ、辺の状態がの時のスコアの最小値。但し、
の時、辺は削除されている
の時、辺は残っている
の時、辺は削除されている
の時、辺は残っている
遷移は、の両方の場合が必要になるだけで、先程と同じです。
辺を初期値とします。
としておきます。(は矛盾しており、あり得ない状況です。)
このDPをまで順に更新します。
辺の状態は、辺の状態に従います。
辺のいずれか一方が削除されている場合
頂点の少なくとも一方は次数0なので、辺は残す必要があります。よって、この時は、
辺の両方がある場合
頂点の両方とも次数が1なので、辺は不要です。よって、この時は、
最終的な答えは、です。
提出コード