带标号弱连通DAG计数
带标号弱连通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\)。
有二项式反演
其中
我们写出原本的式子:
因为转移来的项和 \(k\) 相关所以把求和换位,和 \(k\) 相关的放到前面:
把后面那坨补上一个 \((-1)^k\) 即可使用二项式定理得到 \(0\),所以
感性地理解可以将含 \(i\) 个点层看作拥有 \(i\) 个属性的容斥。
这个东西显然可以分治 NTT ,把 \(2\) 的指数拆成二次剩余或者组合数只差就可以做到。
考虑优化,将这个式子变形一下,可以得到:
所以将 \(\frac {f_i}{i!2^{\binom{i}{2}}}\) 看作有序集族数,\(\frac {(-1)^{k+1}}{2^{\binom k 2}k!}\) 看作集合数,多项式求逆即可做到 \(O(n\log n)\)。
本文已经结束了。本文作者:ღꦿ࿐(DeepSea),转载请注明原文链接:https://www.cnblogs.com/Dreamerkk/p/17147952.html,谢谢你的阅读或转载!