私は、題し
第二に、分析
質問もっと面白い、ここにも結論を学んだ:$ 1 $に$ N $任意のパスXORをし、ループの一部に排他的XORと図$ N $の任意の1 $ 1 $であってもよいですか、そして利用可能な組み合わせ。自分自身の数の排他的または$ 0 $に等しいので。
この問題のために、それはすべてが模索し、その後、XOR値の$ N $パスに$ 1 $のいずれかとして、すべてのシンプルなリング構成のリニア・グループの値(DFS $を$することができ、すべてのシンプルなリングする必要がありますあなたはそれは問題ではないパス上のリングを持っていない場合、あなたは再び、このリングの場所に来ることができ、このリングは)異なるオフセットに二回行く、またはをクリックして、このパスの出発点に相当し、最大値を求めています。
三、ACコード
1つの#include <ビット/ STDC ++ H> 2 3 使用して 名前空間STDを、 4 の#defineっ長い長い 5 の#define MIN(A、B)((A)>(B)?(B):( A)) 6 の#define MAX(A、B)((A)>(B)? (A):( B)) 7 のconst int型 MAXN = 5E4 + 13 。 8 のconst int型 MAXL = 60 。 9 10 構造体端部 11 { 12 INT 、REVに、 13 LLコスト。 14 エッジ(){} 15 エッジ(INTLLコスト、にint型REV){ 16 本 - > =までに、 17 本 - >コスト= コスト; 18 本 - > REV = REV。 19 } 20 }。 21ベクター<縁> G [MAXN]。 22 LL和[MAXN]、ANS [MAXN << 3 ]、基地 [MAXL + 2 ]。 23 int型のCNT; 24 ブールフラグ[MAXN]。 25の 26 ボイド DFS(int型の、int型REV) 27 { 28 フラグ= [S]で1。; 29 用(INT I = 0 ;私はGを<S] .size();私は++ ){ 30 エッジE = G [S] [I]は、 31である IF(!改訂= I){ 32 IF(!フラグ[e.to]で){ 33は、 SUM [e.to] = SUM [S] ^ e.cost; 34は DFS(e.to、e.rev); 35 } 36 他{ 37 // レコード排他的論理和リング 38である ANS [CNT ++] = SUM [e.to] ^ SUM [S] ^ e.cost; 39 } 40 } 41 } 42 } 43 44 空隙getbase() 45 { 46 のmemset(ベース、0、はsizeof(ベース))。 47 のためには、(int型 = Iを0 ; iは<CNTを、iは++ ){ 48 のために(INT J = MAXLあり、j> = 0 ; j-- ){ 49 であれば((ANS [I] >> j)を&1 ){ 50 もし(基地[J]){ 51 ANS [I] =のANS [I] ^ 基地[J]。 52 } 53 他{ 54 塩基 [J] =のANS [I]。 55 のための(int型 K = J - 1、K> = 0 ; k-- ) 56 であれば((基地 [J] >> K)&1 ) 57 塩基 [J] ^ = 基地[K]。 58 のための(int型 K = J + 1、K <= MAXL; ++ k個) 59 であれば((基地 [K] << J)・1) 60 基地 [K] ^ = 基地[J]。 61 ブレーク; 62 } 63 } 64 } 65 } 66 } 67 68 のint main()の 69 { 70 freopenは(" INPUT.TXT "、" R " 、STDIN)。 71 int型 N、M、から、であり; 72 のLL D。 73 エッジe。 74 のscanf(" %D%dの"、&N、&M)。 75 のために(int型 I = 0 ;私がm <; Iは++ ){ 76 のscanf(" %D%D%LLD "、&から、&&、のD)。 77 G【から.push_back](エッジ()).size([する] G、D、に)。 78 .push_back【に】G(エッジ(から [D、G、から .size(]) - 1 ))。 79 } 80 のmemset(和、0、はsizeof (合計))。 81 のmemset(フラグ、0、はsizeof(フラグ))。 82 CNT = 0 。 83の DFS(1 - 1 )。 84 getbase()。 85 LLアンス= 和[N]。 86 のために(int型 = MAXLをIを、I> = 0 ; i-- ){ 87 であれば(ANS <(ANS ^ 基地[I])) 88 アンス^ = 基地[I]; 89 } 90 のprintf(" %LLDする\ n " 、ANS)。 91 リターン 0 ; 92 }