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)}\) 这个东西就行了

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

#include<bits/stdc++.h>
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<n;i++)if(i<R[i])swap(A[i],A[R[i]]);for(int i=1;i<n;i<<=1){int t0=qm(3,(mod-1)/(i<<1)),x,y;for(int j=0;j<n;j+=i<<1){int t=1;for(int k=0;k<i;k++,t=1ll*t*t0%mod){x=A[j+k];y=1ll*t*A[j+k+i]%mod;A[j+k]=(x+y)%mod;A[j+k+i]=(x-y+mod)%mod;}}}
}
inline void mul(int *A,int *B){NTT(A);NTT(B);for(int i=0;i<=n;i++)A[i]=1ll*A[i]*B[i]%mod;NTT(A);reverse(A+1,A+n);for(int i=0,t=inv(n);i<=n;i++)A[i]=1ll*A[i]*t%mod;
}
int Fac[N],Finv[N],Gac[N],Ginv[N],a[N],b[N],f[N];
void priwork(int n){Fac[0]=Finv[0]=Gac[0]=Ginv[0]=1;for(int i=1;i<=n;i++){Fac[i]=1ll*Fac[i-1]*i%mod;Finv[i]=inv(Fac[i]);Gac[i]=qm(G,1ll*i*i);Ginv[i]=inv(Gac[i]);}
}
inline void solve(int l,int r){if(l==r)return ;int mid=(l+r)>>1,L;solve(l,mid);m=r-l+1;for(n=1,L=0;n<=m;n<<=1)L++;for(int i=0;i<n;i++)R[i]=(R[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<m;i++,o=-o){b[i]=1ll*o*Finv[i]*Ginv[i]%mod;if(b[i]<0)b[i]+=mod;}mul(a,b);for(int i=mid+1;i<=r;i++)f[i]=(f[i]+a[i-l])%mod;solve(mid+1,r);
}
int main(){freopen("pp.in","r",stdin);freopen("pp.out","w",stdout);int n;cin>>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

有标号的DAG计数 II相关推荐

  1. COGS2355 【HZOI2015】 有标号的DAG计数 II

    题面 题目描述 给定一正整数n,对n个点有标号的有向无环图(可以不连通)进行计数,输出答案mod 998244353的结果 输入格式 一个正整数n 输出格式 一个数,表示答案 样例输入 3 样例输出 ...

  2. COGS 2353 2355 2356 2358 有标号的DAG计数

    不用连通 枚举入度为0的一层 卷积 发现有式子: 由$n^2-i^2-(n-i)^2=2*i*(n-i)$ 可得$2^{i*(n-i)}=\frac{{\sqrt 2}^{(n^2)}}{{\sqrt ...

  3. P6295 有标号 DAG 计数(多项式指数函数对数函数/二项式反演/动态规划/生成函数)

    P6295 有标号 DAG 计数 https://www.luogu.com.cn/problem/P6295 求解n个点的有标号弱联通DAG个数 首先根据exp的组合意义,我们考虑指数型生成函数,那 ...

  4. P6295-有标号 DAG 计数【多项式求逆,多项式ln】

    正题 题目链接:https://www.luogu.com.cn/problem/P6295 题目大意 求所有nnn个点的弱联通DAGDAGDAG数量. 1≤n≤1051\leq n\leq 10^5 ...

  5. [学习笔记]多项式与有标号简单图计数

    学了一天的有标号无向图计数真的自闭了- 本篇文章是基于2019WC汪乐平大佬的讲课课件<生成函数,多项式算法与图的计数>编写的. 注意:文中所有生成函数都规定为指数型生成函数(EGF),请 ...

  6. 生成函数Euler变换学习笔记(无标号有根树计数)

    众所周知,对于有标号计数的指数型生成函数 f(x)f(x)f(x),将其任意地进行无顺序的组合,得到的生成函数是exp(f(x))exp(f(x))exp(f(x)). 而对于无标号计数的这样的组合, ...

  7. 【学习笔记】树的计数,prufer(Prüfer)编码,Cayley公式及相应例题

    目录 1.pruferpruferprufer编码 1)无根树转化为prufer序列 2)prufer序列转化为无根树. 2.Cayley公式 1)由Cayley公式得到四个推论 例题1.P4981 ...

  8. NOI WC 2019 小结

    Day 1 评测系统与参赛策略 王逸松 松松松手把手教你如何搭建评测系统(掉线-) 不过有一点实用的 linux 下 time ./a 可以看a的运行时间 顺便以赠送小黄鸭为评测鸭打了一波广告 既然拿 ...

  9. 2018 年 5 月

    今天是 5 月 3 日,从今天开始每天打个卡,大概是晚上 8 点到 10 点之间更新,记录一天所学. 5 月 3 日 1.min-max 容斥 容斥应用在 min max 之间,有 $$\max S ...

最新文章

  1. 中北大学c语言程序设计作业答案,2016年中北大学软件学院程序设计基础考研复试题库...
  2. delphi memo 行数 自动换行_大咖分享办公秘籍:Word和Excel换行
  3. python列表按照指定顺序排序-Python常见排序操作示例【字典、列表、指定元素等】...
  4. 146. Leetcode 51. N 皇后 (回溯算法-棋盘问题)
  5. Java中string拼接,StringBuilder,StringBuffer和+
  6. ibatis 操作返回值
  7. 机器学习面试——分类算法SVM
  8. javascript耐人寻味
  9. TCP/IP协议栈:TCP超时重传机制
  10. Java GC机制详解
  11. Linux系统结构以及用户态和核心态
  12. Android开发环境的搭建教程
  13. 泛函分析笔记0:绪论
  14. android tasker,Android 神器,Tasker 实战
  15. 如何在线绘制简单又漂亮的思维导图
  16. python面试题 网络编程和并发(34道题)
  17. 有哪些办法可以将ip地址更换?
  18. Hadoop基本命令(记一次Hadoop课后实验)
  19. mpi_barrier
  20. 数据集WordNet-WN18

热门文章

  1. java 注解入门 简书_Java注解入门
  2. java gridout_java 布局管理器GridLayout
  3. mysql conflict语句_详细解读MySQL事务
  4. nuxt页面跳转_还不会Nuxt.js的速进!
  5. python百度知道_用Python写的一个【百度知道】自动点赞
  6. flask-sqlalchemy Configuration
  7. Werkzeug routing
  8. python makefile
  9. javascript String 对象
  10. 3.3 超参数训练的实践:Pandas VS Caviar