> makibishi throw|

ABC139E - League

問題概要

リンク

N 人の選手が大会に参加する。各選手は 1 日 1 試合しか行えず、ii番目の選手はAi,1,Ai,2,...,Ai,N1A_{i,1},A_{i,2},...,A_{i,N-1}の順に試合を行う必要がある。試合の日程をこの条件を満たすように決めることは可能か。可能であれば全ての試合が完了するまでにかかる最小日数を求めよ。

制約

3N10003 \leq N \leq 1000

1Ai,jN1 \leq A_{i,j} \leq N

Ai,jiA_{i,j} \neq i

Ai,1,Ai,2,...,Ai,NA_{i,1},A_{i,2},...,A_{i,N}は全て異なる。

解法

グラフとして考える

2 人の選手i,ji,jの試合を行うことができる条件を考えてみる。

選手iiAi,x=jA_{i,x} = jとなるAi,1,...,Ai,x1A_{i,1},...,A_{i,x-1}までの試合(jjの選手と戦うまでの全ての試合)を終えている必要がある。Ai,x1A_{i,x-1}の試合を終えているためにはAi,x2A_{i,x-2}の試合が終わっている必要があるため、結局Ai,x1A_{i,x-1}が終わっていることだけを見ればよい。

選手jjについても同様に、Aj,y=iA_{j,y} = iとなるyyについて、Aj,y1A_{j,y-1}の試合を終えている必要がある。

まとめると、

  • Ai,x=jA_{i,x} = jとなるxxについて、Ai,x1A_{i,x-1}を終えている (x=0 ならAi,x1A_{i,x-1}は存在しない)
  • Aj,y=iA_{j,y} = iとなるyyについて、Aj,y1A_{j,y-1}を終えている (y=0 ならAj,y1A_{j,y-1}は存在しない)

の 2 つを満たせばi,ji,jの試合ができ、Ai,xA_{i,x}Aj,yA_{j,y}を消化することができる。このように、任意のi,ji,jの組の試合を行うためには、020〜2個のある組の試合が行われている必要がある。

この関係を図示してみると、A=(234143421321)A = \left( \begin{array}{cccc} 2 & 3 & 4 \\ 1 & 4 & 3 \\ 4 & 2 & 1 \\ 3 & 2 & 1 \end{array} \right)なら

graph

と、選手の組を頂点とした有向グラフとして表現できる。

このグラフでは各辺がXX日からX+1X+1日目の移動を表しているため、このグラフの最長パスの長さを求めることで、答えを求めることができる。グラフを構築するのに必要な計算量は、各選手の組(頂点)に対して張るべき辺はO(1)O(1)で分かるので、合わせてO(N2)O(N^2)となる。

残る問題としては、

  • 試合日程を組めないケースをどのように検出するか
  • グラフの最長パスをどのように求めるか

がある。

日程を組めないケースの検出

入力例で日程を組めないケースとなっていたA=(233112)A = \left( \begin{array}{cc} 2 & 3 \\ 3 & 1 \\ 1 & 2 \\ \end{array} \right)についてグラフを作ってみる。

graph2

このように、明らかに日程が組めないことが分かる。全ての試合が他の試合に依存しているためである。 このようなグラフはトポロジカルソートが可能かどうかによって判定できる。

グラフの最長パス

まず、計算対象のグラフはトポロジカルソートができるので、DAGであることが保証される。DAG の最長パスは、以下のようにして求めることができる。

  • 各頂点に対し、その頂点に訪問するまでにかかる最長距離v[i]v[i]を持っておく。最初は全てのv[i]=0v[i]=0
  • 各頂点をトポロジカル順序で見ていき、以下を行う。
  • 現在見ている頂点と隣接する頂点jjに対し、v[j]=max(v[j],v[i]+1)v[j] = max(v[j],v[i]+1)で更新する。

このアルゴリズムは全ての頂点に対してその頂点に隣接する辺を見るので、頂点数をVV、辺数をEEとしてO(V+E)O(V+E)となる。V=N(N1)/2V = N(N-1)/2VVから出る辺は高々 2 つなのでO(N2)O(N^2)となる。

まとめ

選手の組みを頂点とし、先に終えておく必要がある選手の組みの試合を辺で表現することでグラフを構築する。グラフの最長パスが解となる。グラフの構築がO(N2)O(N^2)、最長パスを求めるのがO(N2)O(N^2)なので、全て合わせてO(N2)O(N^2)である。