
首先用類似Tarjan算法的方法把圖中的每一個環單獨的取出來。
我們知道不在環中的邊一定要取的,是以可以求出\(base\)代表不在環中的邊的權值異或和。
然後每個環我們隻需要删除一個邊即可,也可以很簡單的求出環中的删除一條邊後剩餘邊權值的異或和。
設共有\(num\)個環,
那麼問題就轉化為,從\(num+1\)個集合中,每一集合選擇一個數,将異或起來的權值最小為多少,有多少種方案數?
其中前\(num\)個集合都是環,最後一個集合隻有一個元素為\(base\),那麼這是一個經典的異或卷積\(FWT\)算法的應用。
同時我們注意到,題目要求輸出方案數,且給定了一個模數,
因為卷積涉及到求和運算,那麼在卷積的過程中會存在本來方案數大于0的取模後變為0,這樣會影響我們對答案即異或得到的最小權值的求解。
所有我們用2個模數求分别\(FWT\),隻要有一個得到的異或成\(ans\)的方案數不為0,即代表可以得到該值。(此處類似雙hash的思想。)