Official

G - XOR Neighbors Editorial by sotanishy


\(1\) 以上 \(2^N\) 未満の整数を書き込んで条件を満たす方法を説明します.

条件の整理

まず,問題文の条件を,行列とベクトルを用いて表します.以下の説明では,足し算と掛け算はすべて \(\mathrm{mod}\,2\) で考えることとします.XOR は \(\mathrm{mod}\,2\) の足し算にほかなりません.

与えられたグラフの隣接行列を \(A\) とします.すなわち,\(A\)\(N \times N\) の行列で,頂点 \(i,j\) の間に辺があるときは \(A_{ij}=1\),そうでないときは \(A_{ij}=0\) とします.

また,頂点 \(i\) に書き込む数字の \(k\) bit 目 (\(0 \leq k \leq N-1\)) を \(x_{k,i}\) とし,これを \(i\) について並べたベクトルを \(x_k = (x_{k,1},\dots,x_{k,N})\) とします.

各頂点について,それと隣接している頂点に書き込まれている整数の XOR が \(0\) であるという条件は,次のように表されます.

\(i=1,2,\dots,N\)\(k=0,1,\dots,N-1\) について, \(\sum_{j=1}^N A_{ij} x_{k,j} = 0\)

この条件を行列積を用いて書き換えると次のようになります.

\(k=0,1,\dots,N-1\) について, \(Ax_k = 0\)

また,どの頂点に書き込まれる整数も \(0\) でないという条件は次のように表されます.

すべての \(i\,(1\leq i \leq N)\) について, \(x_{0,i},\dots,x_{N-1,i}\) の少なくとも1つは \(1\) である(すなわち,\(x_0,\dots,x_{N-1}\) の bitwise OR のすべての成分は \(1\) である)

以上より,\(Ax=0\) を満たすような \(0,1\) からなる \(N\) 次元ベクトル \(x\)\(N\) 個選んで,どの成分にも少なくとも1つの \(1\) が含まれるようにできればよいです.

条件を満たす \(x_0,x_1,\dots,x_{N-1}\) の求め方

\(Ax = 0\) を満たすベクトル \(x\) は,XOR に関して閉じています.つまり, \(x,x'\)\(Ax=0,Ax'=0\) を満たすならば, \(x''=x + x'\) で定まるベクトル \(x''\)\(Ax''= 0\) を満たします.

XOR について閉じている \(N\) 次元の \(0,1\) からなるベクトルの集合 \(S\) には,基底が存在します.\(S\) の基底とは,以下を満たすベクトルの集合 \(B=\{b_1,b_2,\dots,b_m\}\) です.

  • \(S\) の任意の元は,\(B\) からいくつかの元を選んで XOR を取ることで表すことができる
  • \(B\) から \(1\) 個以上の元を選んで XOR を取ったとき,\(0\) になることはない

基底の要素数は \(N\) 以下です.

\(Ax=0\) を満たすベクトルの全体からなる集合 \(S\) の基底を \(b_1,b_2,\dots,b_m\) としたとき,これらの bitwise OR のすべての成分が \(1\) であれば,例えば \(x_0=b_1,x_1=b_2,\dots,x_{m-1}=b_m,x_m=x_{m+1}=\dots=x_{N-1}=0\) とすることで,条件を満たす \(x_0,x_1,\dots,x_{N-1}\) を得ることができます.逆に,基底の bitwise OR に \(0\) となる成分があれば,\(B\) のすべての元についてその成分は \(0\) であり,\(B\) の元の XOR として表される \(S\) のすべての元についてもその成分は \(0\) です.よって,この場合条件を満たすことは不可能です.

以上より,連立方程式 \(Ax=0\) の解集合の基底を求めることができれば,この問題を解くことができます.一般に,連立方程式 \(Ax=b\) の解は,掃き出し法というアルゴリズムによって \(O(N^3)\) 時間で求められます.このアルゴリズムは,以下の記事で詳細に説明されています.

\(0,1\) からなる \(N\) 次元ベクトル \((N \leq 60)\) の元が 64-bit 整数で表現できることを利用して,\(O(N^2)\) 時間で掃き出すこともできます.

posted:
last update: