天天看點

[Bubble Cup 12 - Finals [Div. 1]] -D. Xor Spanning Tree (仙人掌圖扣環,FWT)

[Bubble Cup 12 - Finals [Div. 1]] -D. Xor Spanning Tree (仙人掌圖扣環,FWT)

首先用類似Tarjan算法的方法把圖中的每一個環單獨的取出來。

我們知道不在環中的邊一定要取的,是以可以求出\(base\)代表不在環中的邊的權值異或和。

然後每個環我們隻需要删除一個邊即可,也可以很簡單的求出環中的删除一條邊後剩餘邊權值的異或和。

設共有\(num\)個環,

那麼問題就轉化為,從\(num+1\)個集合中,每一集合選擇一個數,将異或起來的權值最小為多少,有多少種方案數?

其中前\(num\)個集合都是環,最後一個集合隻有一個元素為\(base\),那麼這是一個經典的異或卷積\(FWT\)算法的應用。

同時我們注意到,題目要求輸出方案數,且給定了一個模數,

因為卷積涉及到求和運算,那麼在卷積的過程中會存在本來方案數大于0的取模後變為0,這樣會影響我們對答案即異或得到的最小權值的求解。

所有我們用2個模數求分别\(FWT\),隻要有一個得到的異或成\(ans\)的方案數不為0,即代表可以得到該值。(此處類似雙hash的思想。)