题解
写完之后开始TTTTTTT……懵逼
这道题我们考虑一个东西叫容斥系数啊><
这个是什么东西呢
也就是\(\sum_{i = 1}^{m}\binom{m}{i}f_{i} = [m = 1]\)
也就是说,我们求出m个系数,让这个式子只在[m = 1]的时候为1,其余时候为0
啥玩意啊怎么求啊
我们显然可以
\(n^2\)的递推求出来,类似解方程
但是我们打个表就会发现是\(f_{i} = (-1)^{i - 1}(i - 1)!\)
然后我们再考虑这个式子的容斥意义,假如一个图有m个联通块,那么我们会计算有i个联通块的图(i <= m)的时候,都会把这个图算\(\binom{m}{i}\)遍,我们只要乘上容斥系数,就可以保证我们如果这个图是一个联通块的话值是1,否则是0
好的,那么我们考虑如何计算这个子问题至少有m个联通块的图有多少个
我们dfs每个点构成了不同集合的方案,如果一个点在同一集合,连边任意,不在同一集合的一定没有边
这样的话,我们把不在同一集合的一个点对(i,j)作为二进制的数位,如果某张图有(i,j)这条边,那么值为1,否则值为0
那么我们就是变成了要求,有s个数,异或起来为0的方案数
这个可以线性基,答案是\(2^{s - 线性基个数}\)
线性基求的方法有点鬼畜,但是正常的求线性基会T(猫锟是怎么卡的常数啊QAQ
我们把线性无关组存起来,每次得到一个新值和前面的所有值异或一下,如果异或后的值会变小就异或
代码
#include #include #include #include #include #include #include