分析
互いに素セットメンテナンスに
それぞれが現在のルートブロックの排他的論理和の値に通信を行う通信の各ブロックを記録するドット
裁判官に簡単に非準拠の場合
通信中の最後のブロックかどうかを決定し、への回答を記録
コード
#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 ;
}