難易度評価

難易度を1〜10段階で評価できます。投票はあとから変更・取り消しできます。

難易度(投票) 未投票 (0票)

投票の分布

まだ投票はありません。

  1. Lv.10票
  2. Lv.20票
  3. Lv.30票
  4. Lv.40票
  5. Lv.50票
  6. Lv.60票
  7. Lv.70票
  8. Lv.80票
  9. Lv.90票
  10. Lv.100票

難易度の目安を見る ↗

ログインして難易度を投票

外部サイトへ移動します

リンク先の URL を確認してから開いてください。

別タブで開く

Solicitation of Murder

作成者 loop0919

テスター mackerel38

難易度(作成者設定) Lv.5

難易度(投票) 未投票 (0票)

実行時間制限
2 秒
メモリ制限
512 MiB

解説

囚人を頂点、関係 (Ai,Bi)(A_i,B_i) を有向辺 Ai→BiA_i \to B_i とする有向グラフを考えます。

このグラフを強連結成分分解することを考えます。この各強連結成分を 11 頂点にまとめたグラフを縮約グラフと呼びます。この縮約グラフはDAGとなります。

最終的に生存している囚人の集合を SS としたとき、この集合が実現可能であるための必要十分条件は以下の通りです。

  • 縮約グラフの入次数が 00 の各強連結成分に、 SS に含まれる囚人が少なくとも 11 人存在する。
証明

必要性

入次数が 00 の強連結成分を一つ考えます。

この成分の囚人を殺害できるのは、同じ成分に属する囚人だけです。成分内に生存者が 11 人だけになったあと、その最後の 11 人を殺害することはできません。

よって、この成分には少なくとも 11 人の生存者が必要です。

十分性

SS が上の条件を満たしているとします。

DAG の各頂点には、入次数が 00 のいずれかの頂点から到達できます。また、同じ強連結成分に属する頂点どうしは互いに到達可能です。

したがって、すべての頂点に、 SS に含まれるいずれかの頂点から到達できます。

さらに、 SS に含まれない各頂点 vv について、 SS に含まれる頂点から vv への最短距離が遠い順に殺害していくことで、実際に達成することができます。

必要性と十分性が両方とも示せたので、これは必要十分条件です。□

強連結成分 CC の頂点数を ss とします。

  • 縮約グラフでの入次数が 00 の場合:少なくとも 11 人を生存させる必要があるため、生存者の選び方は 2s−12^s-1 通りです。
  • 縮約グラフでの入次数が 11 以上の場合:全員を殺害する場合も含めて自由に選べるため、生存者の選び方は 2s2^s 通りです。

これらの選択は独立であるため、すべての連結成分について上記を計算した総積が答えです。

計算量は、各テストケースについて O(N+M)O(N+M) です。

ユーザー解説

ユーザー解説を書く

ユーザー解説はまだありません。