解説
カード i ごとに4種類の状態 j があるので、それぞれのカードと状態を合わせて 4i+j として別のノードして見ます。
実装としてはUnionFindTreeを用いて、前半では対応するノード同士をマージします。
今回の場合は 4Ai+j と 4Bi+((j−1)⊕(Ci−1)+1) とマージできます。
後半のクエリでは 4Xi+Yi と 4Zi+w が連結であるような w が存在する場合は w を、存在しない場合は -1
を出力します。
これによって O(Mα(N)+Qα(N)) で計算することができます。
想定ソースコード