この問題は、$ LCA $で行うことができますが、グラフ理論を実践するために、私は星を横断チェーンを使用する前に、方法を選択しましたが、
まず、いくつかのことを準備
1 ^ 0 = 2 = A ^ Aを0
そして、要求が一度各グラフトラバーサルを考えている場合は、その後のみ$ 40pts $、わかりますので、私は店に$のXORの$配列を使用します
これは、[V] $ XOR演算が一定で[U] $と$のXOR $のXOR関わらず、出発点として取られているノードの示すことができます。
コード
1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 4 int型 N、M、CNT = 0、ANS、書籍[ 100005 ]。 5 int型のヘッド[ 200005 ]のXOR [ 100005 ]。 6 7 構造体のエッジ{ 8 整数であり; 9 int型のval; 10 int型NXT。 11 }。 12 13エッジのエッジ[ 200005 ]。 14 15 ボイドアドオン(int型 から、INTにint型の値){ 16 ++ CNT。 17 エッジ[CNT] .TO = であり; 18 エッジ[CNT] .nxt =ヘッド【から]。 19 エッジ[CNT] .val = 値。 20 [先頭から =] CNT。 21 } 22 23 ボイド のget(int型、今INT {最後) 24 のための(int型!; I = - I =ヘッド[今] 1 ; I = エッジを[I] .nxt){ 25 であれば(エッジ[I] .TO != 最後){ 26個 のXOR [エッジ[I] .TO] =用のXOR [今] ^ エッジ[I] .val。 27 GET (エッジ[I] .TO、今)。 28 } 29 } 30 リターン。 31 } 32 33 ボイドが解決(){ 34 のint U、V、W。 35 のmemset(ヘッド、 - 1、はsizeof (ヘッド))。 36 のscanf(" %d個"、&N) 37 のために(int型 i = 1 ; iがN <; Iは++ ){ 38 scanf関数を(" %D%D%D "、&U&V、およびW) 39 追加(U、V、W)。 40 (V、U、W)を加えます。 41 } 42 GET(1、0 ); 43 のscanf(" %dの"、&M)。 44 のためには、(int型 I = 1 ; I <= M Iは++ ){ 45 のscanf(" %D%dの"、&U&V)を、 46 のprintf(" %d個の\ n "、のXOR [U] ^ のXOR [V])。 } 48 } 49 50 INT メイン(){ 51 (解きます)。 52 リターン 0 。 53 }