带标号弱连通DAG计数
前言:
前段时间做到了一个无向图边定向的题,就一直没搞懂其中的容斥,今天终于弄懂了。
题意:对弱连通带标号的简单 DAG 计数,\(n\leq10^5\)。
“弱连通”这个限制可以表示为“集和”,任意 DAG 可以视作“集族”,所以二者的 EGF 满足关系 \(\operatorname{Exp}(g(x))=f(x)\),求出任意 DAG 计数再做 \(\operatorname{ln}\) 即可,现在考虑如何求出任意 DAG 计数。
考虑 \(dp\),令 \(f_x\) 表示 \(x\) 个点的 \(DAG\) 的数量。
考虑将 DAG 分层,然后按照拓扑序加点,新加入的一些点没有后继,并且让原本的点向这些点连边。
但是考虑到原本的某些点也没有后继,即分层后相邻的若干层其实可以合并成一层,所以考虑容斥。
令钦定 \(i\) 个点这层的点的方案数为 \(s_i\),恰好 \(i\) 个点的方案数为 \(t_i\),则有 \(s_i=\sum _{j\geq i} \binom{j}{i}t_j\)。
有二项式反演
\[t_i=\sum _{j\geq i} \binom{j}{i}(-1)^{j-i}s_j \]其中
\[s_i=\binom{n}{i}\times2^{i(n-i)}\times f_{n-i} \]我们写出原本的式子:
\[\begin{aligned} f_i &=\sum_{j=1}^i t_j\\ &=\sum _{j=1}^i \sum_{k\geq j} \binom{k}{j}(-1)^{k-j}\binom{i}{k}2^{i(i-k)} f_{i-k} \end{aligned} \]因为转移来的项和 \(k\) 相关所以把求和换位,和 \(k\) 相关的放到前面:
\[\begin{aligned} f_i &=\sum_{k=1} ^i \binom{i}{k}2^{i(i-k)} f_{i-k} \sum _{j=1}^k \binom{k}{j}(-1)^{k-j} \end{aligned} \]把后面那坨补上一个 \((-1)^k\) 即可使用二项式定理得到 \(0\),所以
\[f_i=\sum_{k=1}^i\binom{i}{k} 2^{i(i-k)} f_{i-k} \times(-1)^{k+1} \]感性地理解可以将含 \(i\) 个点层看作拥有 \(i\) 个属性的容斥。
这个东西显然可以分治 NTT ,把 \(2\) 的指数拆成二次剩余或者组合数只差就可以做到。
考虑优化,将这个式子变形一下,可以得到:
\[\frac {f_i}{i!2^{\binom{i}{2}}}=\sum_{k=1}^i \frac { f_{i-k} }{2^\binom{i-k} {2}} \times \frac {(-1)^{k+1}}{2^{\binom k 2}} \]所以将 \(\frac {f_i}{i!2^{\binom{i}{2}}}\) 看作有序集族数,\(\frac {(-1)^{k+1}}{2^{\binom k 2}}\) 看作集合数,多项式求逆即可做到 \(O(n\log n)\)。
标签:标号,DAG,frac,sum,计数,binom,aligned From: https://www.cnblogs.com/Dreamerkk/p/17147952.html