Official

G - Round Robin Editorial by sugarrr


ヒント

\(1\) は単独優勝する可能性があるか? \(\cdots(*)\)

という問題をある程度早く解ければ、これを \(N\) 回解くことで元の問題を解くことができます。

想定解では、\((*)\)最大フロー を用いて解きます。

ここまでのヒントで、グラフを色々作ってみて \((*)\) が解けるかどうか試してみることをお勧めします。


解答

\(p\) は単独優勝する可能性があるか?

という問題を、最大フローを用いて解きます。

まず、人 \(p\) の試合のうち結果が分かっていないものについては、人 \(p\) が勝ったとして良いです。
\(p\) の勝利数を \(win\) とします。\(win=0\) のときは単独優勝できないので、以下 \(win \geq 1\) とします。

頂点 \(S,T,A_{i,j}( 1\leq i\lt j\leq N),B_i (1\leq i \leq N)\) を用意します。
\(S\) が始点、 \(T\) が終点で、\(A_{i,j}\) は人 \(i,j\) の試合、\(B_i\) は人 \(i\) を意味しています。

辺は全て容量 \(1\) として、以下のように張ります。

  • \(S \rightarrow A_{i,j}\)\(1\)

  • \(i,j\) の試合について、

    • \(i\) が勝ちなら、\(A_{i,j} \rightarrow B_i\)\(1\)
    • \(j\) が勝ちなら、\(A_{i,j} \rightarrow B_j\)\(1\)
    • 試合をしていないなら、\(A_{i,j} \rightarrow B_i\)\(A_{i,j} \rightarrow B_j\)\(1\)
  • \(B_p \rightarrow T\)\(win\)

  • \(B_i(i\neq p) \rightarrow T\)\(win-1\)

このグラフにおける \(S\) から \(T\) への最大フローが \(\frac{N(N-1)}{2}\) であることが、人 \(p\) が単独優勝する可能性があることの必要十分条件です。

このグラフは辺の容量が全て \(1\) で、辺数が \(O(N^2)\) なので、\(O(N^3)\) で解くことができます。

これを \(p=1,2,\ldots N\) について解くので、問題全体を \(O(N^4)\) で解くことができました。

posted:
last update: