@owaski
2016-10-15T07:40:02.000000Z
字数 702
阅读 696
题解
若干个联通块直接把每个联通块的答案加起来,因此只考虑一个联通块的情况,设点数为。
考虑求出联通块中的简单环,注意并不是真的要求出所有的简单环(这是NP的),只要满足求出的简单环足够能通过异或构成所有的简单环即可。
怎么求呢,考虑任意一棵生成树的那些返祖边,每一条返祖边对应一个简单环,而且这些环足够通过异或构成所有简单环了。
现在考虑两点间的路径,我们可以任选一条路径,然后将路径异或上若干的简单环变成任意的一条其他的路径,原因很简单,考虑任意一棵生成树上的路径,假如此时要走一条返祖边,那么将原路径异或上返祖边对应的环即可。
因此两点间所有路径可以看成生成树上的路径异或上若干个简单环,求出简单环异或值的线性基,设线性基为,设。
现在我们根据二进制位来考虑对答案的贡献,对于,假如,那么对于任意一对,无论其生成树上路径异或值中是否包括,都可以通过调整某一个线性基来实现这一位为,因此这里对答案的贡献就是: