トランプ当て

2 secs 1024 MB
Hitsuji's icon Hitsuji

解説

カード ii ごとに4種類の状態 jj があるので、それぞれのカードと状態を合わせて 4i+j4i+j として別のノードして見ます。

実装としてはUnionFindTreeを用いて、前半では対応するノード同士をマージします。 今回の場合は 4Ai+j4A_{i}+j4Bi+((j1)(Ci1)+1)4B_{i}+((j-1) \oplus (C_i-1) + 1) とマージできます。
後半のクエリでは 4Xi+Yi4X_i+Y_i4Zi+w4Z_i+w が連結であるような ww が存在する場合は ww を、存在しない場合は -1 を出力します。

これによって O(Mα(N)+Qα(N))O(M\alpha(N) + Q\alpha(N)) で計算することができます。

想定ソースコード