lojの#6157 A ^ B問題

分析

互いに素セットメンテナンスに

それぞれが現在のルートブロックの排他的論理和の値に通信を行う通信の各ブロックを記録するドット

裁判官に簡単に非準拠の場合

通信中の最後のブロックかどうかを決定し、への回答を記録

コード

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
INTの N、M、[ 100100 ]、B [ 100100 ]、FA [ 100100 ]、W [ 100100 ]。
インラインINT SF(INT X){ 場合(FA [X] == x)をリターン X。INT = SF(FA [X])F; [X] ^ = W W [FA [X]]。戻り FAは[X] = }; fは
 整数のmain(){
     int型I、J、K、T、OK。
    scanf関数(" %のD "、&T)。
    一方、(t-- ){
       int型 MN = 1E9 + 7、MX = 0 
      OK = 1 ; scanf関数(" %dの%のD "、&​​N、&M)。
      (i = 1 ; iが<= N; iは++)FA [I] = I、W [I] = 0 ;
      以下のための(I = 1のscanf(; iがn <I ++)は、 " %D%dの"、および[I]、&B [I])。
      (i = 1 ; I <= M; iは++ ){
         int型X、Y、Z。
        scanf関数(" %D%D%D "、およびX&Y、およびZ)。
        INT XX = SF(X)、YY = SF(Y)。
        もし(XX == YY){
           場合((W [X] ^ W [Y])= Z!)OK = 0 
        } {
          FA [XX] = YY。
          W [XX] =(W [X] ^ W [Y] ^ Z)。
        }
      }
      もし(!OK)プット(" インポッシブル" )。
        {
           (i = 1 ; iがn <; iは++ ){
             場合(!SF([I])= SF(B [I])){
              OK = 0 ;
              プット(ノー)。
              破ります;
            }
            MN =分(私、([I] ^ [B [I]))。
            MX = MAX(MX、(W [I] ^ W [B [I]))。
          }
          もし(OK)のprintf(" %D%D \ N " 、MN、MX);
      }
    }
    リターン 0 ;
}

 

おすすめ

転載: www.cnblogs.com/yzxverygood/p/11669427.html