【bzoj2115] Xorの

必要に応じてパスは、点離れる他の方向からの場合、リング(そうでなければ無意味来る方向)が存在しなければならない、多くの排他的OR +シクロ最大グループに対応する経路は線形であってもよい検討します頼みます

1つの#include <ビット/ STDC ++ H>
 2  使用して 名前空間STDを、
3  の#define N 100005
 4  の#defineっ長い長い
 5  構造体JI {
 6      int型NEX、であり;
7      LL LEN。
8 }エッジ[N << 2 ]。
9  int型VIS E、N、M、X、Y、ヘッド[N]、[N]。
10 LLのZ、[ 61 ]、S [N]。
11  ボイド追加(int型のx、int型のY、LLのZ){
 12      エッジ[E] .nex = 頭部[X]。
13      エッジ[E] .TO = Y。
14      エッジ[E] .LEN = Z。
15      頭[X] = E ++ 16  }
 17  空隙追加(LLのK){
 18      のためにint型 iは= 60、I> = 0 ; i-- 19          であれば(K&(1LL << I))
 20              であれば([i])とK ^ = A [私];
21              {
 22                  [I] = K。
23                  ブレーク;
24              }
 25  }
 26の 空隙 DFS(int型 K、INT FA、LLのSH){
27の      S [K] = SH。
28      VIS [K] = 1 29      のためにint型 I =ヘッド[K];!I = - 1 ; I = エッジ[I] .nex)
 30          場合(I =!FA)
 31              であれば(VIS [エッジ[I] .TO]!)DFS(エッジ[i]は.TO、I ^ 1、S [k]は^ エッジ[I] .LEN)。
32              他の追加(S [k]は^ S [エッジ[i]は.TO] ^ エッジ[I] .LEN)。
33  }
 34  LLクエリ(LLのK){
 35      のためのint型 J = 60 ; J> = 0 ; j-- 36          であれば((K&(1LL << J))==0)K ^ = A [J]。
37      リターンK。
38  }
 39  INT メイン(){
 40      のscanf(" %D%dの"、&​​N、&M)。
41      のmemset(ヘッド、 - 1はsizeof (ヘッド))。
42      のためにint型 I = 1 ; I <= M; iが++ ){
 43          のscanf(" %D%D%LLD "、およびX&Y、およびZ)。
44          追加(X、Y、Z)。
45          追加(X、Y、Z)。
46      }
 47の      DFS(1、 - 10 );
48      のprintf(" %のLLD " 、クエリ(S [N]));
49 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/PYWBKTDA/p/11330379.html