天天看点

[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的思想。)