P4151 WC2011 最大XOR和路徑

2021-10-20 01:54:54 字數 1742 閱讀 5444

r es

ul

tresult

result

h yp

erli

nk

hyperlink

hyperl

ink de

scri

ptio

ndescription

descri

ptio

n 一張有n

nn個點,m

mm條邊的無向連通圖,每條邊有權值d

id_i

di​,規定點和邊可以重複經過,求從1到n

nn的最大異或和路徑

資料範圍:n≤5

×104

,m≤1

05,d

i≤10

18n\leq 5\times 10^4,m\leq 10^5,d_i\leq 10^

n≤5×10

4,m≤

105,

di​≤

1018so

luti

on

solution

soluti

on可以把這張圖看做若干條鏈連線著若干個環,顯然,如果要遍歷完整某個環,連線它的邊肯定是不會計算在內的(因為它會被計算兩次),如此,我們先把所有的環的權值扔進線性基

考慮如何求解最終答案,假設我們已經選定了一條鏈(也可以說是從1到n

nn的一條路徑),我們可以用環去增廣它,具體地做法是把這條鏈的權值作為初始值扔進線性基跑最大異或和就可以得到答案了

而這條鏈(1到n

nn的一條路徑)實際上是可以隨便取的,因為假設存在另外一條從1到n

nn的路徑,那麼這兩條鏈必然構成乙個環,異或一下就自然會得到另外一條路徑的答案,而我們把原先那條鏈扔進線性基計算答案時自然也計算到了這種情況,正確性顯然。

時間複雜度:o(n

log⁡di

+m

)o(n\log d_i+m)

o(nlogdi

​+m)co

de

code

code

#include

#include

#include

#include

#define ll long long

#define n 50010

using

namespace std;

int n,m,l[n]

,tot,u,v;

ll a[61]

,w,dis[n]

;bool ***;

struct nodee[n<<2]

;inline

void

add(

int u,

int v,ll w)

;l[u]

=tot;

return;}

inline ll read()

inline

void

insert

(ll x)

else x^

=a[i]

;return

(void

)(***=

true);

}inline ll qmax

(ll res=0)

bool vis[n]

;inline

void

dfs(

int x,ll dis)

signed

main()

P4151 WC2011 最大XOR和路徑

題意 給定乙個無向連通圖包含 n 個點 和 m 條邊,每條邊有邊權,現在讓你求一條 從點 1 到 n 的路徑,使得路徑上的邊權異或和最大。可能有邊重邊和自環,任意邊可以重複走,沒有限制 分析 首先根據異或的性質,一條邊 或 乙個環 走偶數遍的異或和 都是 0 所以對於乙個環,要麼不走,要麼只走一遍,...

WC2011 最大XOR和路徑

wc2011 最大xor和路徑 本題關鍵是抓住xor的性質 a b a b 異或兩次等於0 1到n,一定是走一條路,可能再往別處走出環 每個環都可以 獨立 走出來 1到n的路徑,可以拆成任意一條路和若干個環拼成的 dfs找環,加入線性基 能變大就異或上去。o m 64 include define ...

WC 2011 最大Xor和路徑

給你一張n個點,m條邊的無向圖,每條邊都有乙個權值,求 1到n的路徑權值和的最大值。任意一條路徑都能夠由一條簡單路徑 任意一條 在接上若干個環構成 如果不與這條簡單路徑相連就走過去再走回來 那麼在對這些環進行分類 1 直接與簡單路徑相連 相交的重複部分不算就可以了。2 不與簡單路徑相連 我們需要跑過...