题目描述
对 个点有标号的有向无环图进行计数,要求:弱连通图(所有的有向边替换为无向边后的图为连通图)。输出答案对 取模的结果。
输入格式
一个整数 。
输出格式
共 行,第 行输出 时的答案。
输入输出样例 #1
输入 #1
输出 #1
说明/提示
第一个点 。
第二个点 。
题解
考虑先求出任意有标号 DAG,然后对 EGF 求一下 即可得到弱连通的 DAG 数量。
设 表示 个点的有标号 DAG 数量,则:
枚举至少有 个入度为 0 的点的个数(因为 DAG,所以一定存在至少一个入度为 0 的点),剩余的 个点构成 DAG,这 个点到另外 个点任意选择连不连边。但是注意到这个 没有保证恰好,只是保证最少有 个入度为 0 的点,所以还需要容斥一下。
然后把 和 分别解决掉就可以了。
我们再熟悉不过,求两边的 EGF 即可消去。
另一个 trick 也是常用的:
所以:
按照和 EGF 相同的策略,我们设两个生成函数:
那么改写最上面的式子,就有:
最后的 是因为 。
解得:
计算可得 的值。
最后考虑弱连通的条件,不弱连通的 DAG 肯定由若干个连通分量组合。设 的 EGF 为 ,弱连通 DAG 的 EGF 为 ,那么按照 EGF 的组合意义:
所以:
总的过程是一次求逆和一次 ,时间复杂度 。