P4551最長パスは、トライをXOR

  

 

 

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(10 ); 
    担当者(I、1 、n)がアップノード(扁[i]は、根);
    int型 ANS = 0 ; 
    担当者(I、1n)は年間= MAX(年Qmaxと(扁[i]は、根))。
    coutの << 年。
    リターン 0 ; 
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/bxd123/p/11511573.html