題意:給定乙個無向連通圖包含 n 個點 和 m 條邊,每條邊有邊權,現在讓你求一條 從點 1 到 n 的路徑,使得路徑上的邊權異或和最大。(可能有邊重邊和自環,任意邊可以重複走,沒有限制)
分析:首先根據異或的性質,一條邊 或 乙個環 走偶數遍的異或和 都是 0 ,所以對於乙個環,要麼不走,要麼只走一遍,那麼可以構想出最優路徑一定是一條從 1 到 n 的 鏈 上套著 若干環,那麼我們把每個環的異或和加進線性基,用這條鏈的異或和去 異或 線性基找到最大值就可以了,可是這個最優解的鏈怎麼找呢,其實只要任意找一條從 1 到 n 的鏈就可以了,因為若存在兩條從 1 到 n 的鏈,則它們已經構成了乙個環,無論你選擇哪一條作為基鏈,異或上這個環都會得到另一條鏈的異或和,所以就不用擔心最優解的正確性了。
**:
#include
#include
#include
using
namespace std;
typedef
long
long ll;
const
int n =
5e4+10;
struct l_b
bool
insert
(ll val)
val^
=d[i];}
}return val>0;
} ll query
(ll res)
}h;int n,m;
struct nodee[n*4]
;int head[n]
,tot=0;
void
add(
int u,
int v,ll w)
ll dis[n]
;bool vis[n]
;void
dfs(
int u,
int pre,ll res)
}int
main()
dfs(1,
0,0ll)
;printf
("%lld"
,h.query
(dis[n]))
;}
P4151 WC2011 最大XOR和路徑
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 規定點和邊可以重複經過,求從...
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 不與簡單路徑相連 我們需要跑過...