給你一張n個點,m條邊的無向圖,每條邊都有乙個權值,求:1到n的路徑權值和的最大值。
任意一條路徑都能夠由一條簡單路徑(任意一條),在接上若干個環構成(如果不與這條簡單路徑相連就走過去再走回來)。
那麼在對這些環進行分類:
1、直接與簡單路徑相連
相交的重複部分不算就可以了。
2、不與簡單路徑相連
我們需要跑過去,再跑回來對吧,這樣的話,不管我們是怎麼跑的,非環的路徑對答案的貢獻始終為0,(抵消了嘛)。
這樣的話,我們只需要用這幾個環來構造線性基即可,最後再找個最大值就行啦!
#include#define ll long longusing
namespace
std;
const
int n=50005,m=200005
;ll b[
65],dist[m],d[n],z,ans;
inthead[n],vet[m],nxt[m],n,m,x,y,tot;
bool
vis[n],used[m];
void add(int x,int
y,ll z)
void
insert(ll x)
}void dfs(int
u) else
if (!used[i^1
]) }
}int
main()
dfs(1);
ans=d[n];
for (int i=63;i>=0;i--)
if ((ans^b[i])>ans) ans=ans^b[i];
printf(
"%lld\n
",ans);
return0;
}
WC2011 最大XOR和路徑
wc2011 最大xor和路徑 本題關鍵是抓住xor的性質 a b a b 異或兩次等於0 1到n,一定是走一條路,可能再往別處走出環 每個環都可以 獨立 走出來 1到n的路徑,可以拆成任意一條路和若干個環拼成的 dfs找環,加入線性基 能變大就異或上去。o m 64 include define ...
WC2011 最大XOR和路徑 題解
首先看到題面,最大 異或 聯想到了什麼?沒錯,線性基。不會的同學請先學習 線性基。但是這道題,因為是在圖里,所以不能直接簡單地用線性基求解。觀察題目中的圖,我們可以發現 嗎?答案一定是由從 1 到 n 的一條路徑上的異或和以及若干環上的異或和構成的。首先我們要理清乙個問題 從 1 到 n 的路徑不用...
題解 WC2011 最大XOR和路徑
luogu 給定 n 個點 m 條邊的帶權無向圖 問所有 1 到 n 的路徑中 邊權異或和最大是多少 其中 n le 50000,m le 100000 且可能有重邊和自環 首先 看到最大異或和 我們很自然的想到用線性基去處理 但線性基對最大異或和的限制十分嚴格 需要數字之間能任意異或 而本題需要選...