XORは、一般的に多くの問題が01trieを構築する必要が発生しました
この問題限りツリー01が構成されたn個の点の各点ルートノードに(1)排他的またはパストライへ
次に、n個のXORこの資料は、ルート・ノード・パスに最大値を選択します
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 #define担当者(I、B)(I =(A)がINT;方には<=(B); iが++) の#define repp(I、B)(I =(A)がINTのために、I> = (B); - I) の#defineは長い長いっ の#defineは(X)(CERR <<(#X)<< '=' <<(X)<< ENDL)を参照 の#define INF 0x3f3f3f3f の#define CLR( 、V)のmemset(A、V、はsizeof A) ///////////////////////////////// / CONST INT N = 2E6 + 10 。 構造体のエッジ{ INTに、V、NEX;}エッジ[N << 1 ]。int型のヘッド[N]、POS、ルート。 無効アドオン(int型、B、int型の C){エッジ[++ POS] =(エッジ){B、C、ヘッド[A]};ヘッド[A] = POS;} int型 T [N] [ 2 ]、TOT、扁[N] ; ボイドアップノード(int型のx、int型RT) { ため(int型 I =(1 << 30); I; I >> = 1 ) { BOOLの C = I&X; もし(![RT] [C] T)T [RT] [C] = ++ TOT; 室温 =のT [RT] [C]。 } } int値 Qmaxを(int型のx、int型RT) { int型 ANS =0 ; 以下のために(int型 I =(1 << 30); I; I >> = 1 ) { BOOLの C = I&X; もし(T [RT] [C ^ 1 ])ANS + = I、RT = T [RT] [C ^ 1 ]。 そうでなければ、RT =のT [RT] [C]。 } 戻りANS。 } int型N、M、X、Y、Z。 ボイド DFS(int型のx、int型FA) { ため(int型 ; I I = I =ヘッド[X] エッジ[I] .nex) { int型 V = エッジ[I] .TO。 もし(== FA V)続けます。 扁は、[V]扁[X] ^ = エッジを[I] .V。 DFS(V、X) } } int型のmain() { CIN >> N。 担当者(I、1、N- 1 ) { scanf関数(" %D%D%D "、およびX&Y、およびZ)。 (X、Y、Z)を追加し、(X、Y、Z)を追加します。 } DFS(1、0 ); 担当者(I、1 、n)がアップノード(扁[i]は、根); int型 ANS = 0 ; 担当者(I、1n)は年間= MAX(年Qmaxと(扁[i]は、根))。 coutの << 年。 リターン 0 ; }