博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
有标号的DAG计数 II
阅读量:5036 次
发布时间:2019-06-12

本文共 1190 字,大约阅读时间需要 3 分钟。

Description

给定一正整数n,对n个点有标号的有向无环图(可以不连通)进行计数,输出答案mod 998244353的结果

Solution

考虑 \(O(n^2)\) DP

枚举出度为 \(0\) 的点,构成的新\(DAG\)方案数为
\(f[i]=f[i-1]*C_{n}^{1}*2^{n-1}\)
即从 \(n\) 个点中选出一个点,作为出度为 \(0\) 的点,然后剩下 \(n-1\) 个点向这个点任意连边

但是 \(f[i-1]\) 中也会有出度为 \(0\) 的点,那么就算重了,考虑容斥这个算重的东西

\(f[n]=\sum_{i=1}^{n}(-1)^{i+1}**f[i-j]*C_{i}^{j}*2^{j*(i-j)}\)
即至少有一个出度为 \(0\) 的点-至少有两个的+....

这个式子可以 分治+\(NTT\) 优化

只需要拆 \(2^{j*(i-j)}\) 这个东西就行了
1146405-20180312194155371-260237360.png
1146405-20180312194202515-371904411.png

\(\sqrt(2)\) 的逆元可以枚举求出来

#include
using namespace std;typedef long long ll;const int N=4e5+10,G=116195171,mod=998244353;inline int qm(int x,ll k){ int sum=1; while(k){ if(k&1)sum=1ll*sum*x%mod; x=1ll*x*x%mod;k>>=1; } return sum;}inline int inv(int x){return qm(x,mod-2);}int n,m,R[N];inline void NTT(int *A){ for(int i=0;i
>1,L; solve(l,mid); m=r-l+1; for(n=1,L=0;n<=m;n<<=1)L++; for(int i=0;i
>1]>>1)|((i&1)<<(L-1)),a[i]=b[i]=0; for(int i=l;i<=mid;i++)a[i-l]=f[i]; for(int i=1,o=1?1:-1;i
>n; priwork(n);f[0]=1; solve(0,n); f[n]=1ll*f[n]*Fac[n]%mod*Gac[n]%mod; printf("%d\n",f[n]); return 0;}

转载于:https://www.cnblogs.com/Yuzao/p/8551286.html

你可能感兴趣的文章
HDU 1011 Starship Troopers (树形DP)
查看>>
手把手教你写DI_1_DI框架有什么?
查看>>
.net常见的一些面试题
查看>>
OGRE 源码编译方法
查看>>
上周热点回顾(10.20-10.26)
查看>>
C#正则表达式引发的CPU跑高问题以及解决方法
查看>>
云计算之路-阿里云上:“黑色30秒”走了,“黑色1秒”来了,真相也许大白了...
查看>>
APScheduler调度器
查看>>
设计模式——原型模式
查看>>
【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.1.CSS框架和其他功能
查看>>
如何一个pdf文件拆分为若干个pdf文件
查看>>
web.xml中listener、 filter、servlet 加载顺序及其详解
查看>>
前端chrome浏览器调试总结
查看>>
获取手机验证码修改
查看>>
数据库连接
查看>>
python中数据的变量和字符串的常用使用方法
查看>>
等价类划分进阶篇
查看>>
delphi.指针.PChar
查看>>
Objective - C基础: 第四天 - 10.SEL类型的基本认识
查看>>
java 字符串转json,json转对象等等...
查看>>