集合幂级数初探
设全集 \(U=\{1 \cdots n\}\),规定集合幂级数 \(f : 2 ^ U \to R\) 为从 \(U\) 的子集到 \(R\) 上的映射,其中 \(R\) 为交换环。
\(f_S \in R\) 是 \(S\) 映射到的值。
规定集合幂级数的并卷积,交卷积,对称差卷积,子集卷积。
将子集卷积定为集合幂级数间的乘法,考虑如何计算。
FMT 算法可以快速计算并卷积,而子集卷积额外要求 \(i,j\) 不交,这充要于 \(|i|+|j|=|k|\)。
故设集合幂级数 \(f' : 2 ^ U \to R[x]\),并有 \(f'_S = x^{|S|} f_S\),则 \(f' * g' = h'\),有 \(h_S = [x^{|S|}]h'_S\),做 FMT 变换即可,时间复杂度 \(O(n^2 2^n)\)。
复合:设 \(f_{\empty} = 0\),求\(\sum_{i \ge 0} h_i f^i\)。其中幂为子集卷积。
注意到 \(i > n\) 时 \(f^i = 0\),故取上界为 \(n\) 结果不变。有朴素的 \(O(n^3 2^n)\) 做法。
考虑沿用 \(f'\),则
故要想得到复合后的 \(h(f)\),相当于对 \(\text{FMT}(f')_S\) 复合上 \(h\) 后求 \(\text{IFMT}\) 最后形如上提取系数,朴素做法仍然 \(O(n^3 2^n)\)。
然而一些常见的复合(求逆,\(\ln, \exp\) 等)已经可以做到 \(O(n^2)\) 复合了(参考)。
另外的复合暂时没有遇到。
复合 2
求 \(\forall i \in [1,n], f^i g\) 共 \(n\) 个集合幂级数。
不失一般性设 \(f_{\emptyset} = 0\),指定每次转移 \(g'_{S \cup T} \gets g_S f_T\) 时有 \(\min (U \setminus S) \in T\),最后乘上 \(i!\) 系数。
枚举转移轮数 \(i\) 及 \(\min (U \setminus S) = j\),做子集卷积。
时间复杂度 \(\sum_{i=1}^n \sum_{j=i}^n (n-j)^2 2^{n-j} = O(n^2 2^n)\)。
例题 1。
\(\ln, \exp\) 的组合意义
exp 相当于不区分顺序的不交子集并,ln 则是其逆运算。
运用非常的技巧性,例题 2,这题主要难在想到双色图与二分图的对应关系,且双色非连通图可以由其极大双色联通子图拼起来得到,且方案唯一(或者可以说对于双色连通图的集合幂级数 \(f\),双色图集合幂级数 \(g = \exp f\),反过来即可),那么可以用 \(\ln\)。最后 \(\div 2\) 即可。
连通 - 边双连通变换
板题,考虑是先用 \(\ln\) 求出连通子图方案数,然后容斥割边数量,相当于缩边双后生成树计数。
考虑枚举 \(i\),连 \(\max(u,v) = i\) 的边,假设处理完 \(1 \sim i - 1\) 的幂级数为 \(f\),则建集合幂级数 \(g\) 满足 \(g_S = f_S (i \in S), g_S = f_S c_{i,S} (i \not \in S)\),其中 \(c_{i,S}\) 为 \(\max (u,v)=i \and u,v \in S\) 的边数,求 \(\exp g\),并对所有 \(i \in S\),用 \(\exp g_S\) 替换 \(f_S\),大概就是增加了新连的边,初始 \(f\) 为集合带的系数就好了,割边带的系数可以算在 \(g (i \not \in S)\) 中。
本文来自博客园,作者:lnw143,转载请注明原文链接:https://www.cnblogs.com/lnw143/p/19486722

浙公网安备 33010602011771号