题意:

求出n个点的简单(无重边无自环)无向连通图数目.
方案数mod 1004535809(479 * 2 ^ 21 + 1)即可.

n<=130000


DP求方案

g(n) n个点所有图的方案数 显然2C(n,2)=2n(n-1)

f(n) n个点连通图的方案数

然后枚举第一个点所在连通块的点数

g(n)=∑i=1..n-1{C(n-1,i-1)*f(i)*g(n-i)}

代入g(n) 两边同除(n-1)!消掉那个组合数上面那块,就变成了卷积的形式

我不写了直接看Miskcoo的公式啦 http://blog.miskcoo.com/2015/05/bzoj-3456

然后C(x)=A(x)*B(x)

A(x)=C(x)*B(x)-1

放在mod (x>n) 意义下求逆元就行了 因为需要的是a[n]


多项式求逆元

去看Miskcoo的教程吧 http://blog.miskcoo.com/2015/05/polynomial-inverse

简单的思路就是知道A(x) mod (x[n/2]) 下的逆元求mod (xn) 下的逆元

方法就是两个同余的式子写出来一减,两边平方再同乘A(x) 再移项

说一点关于意义的理解吧:

A(x)=Q(x)B(x)+R(x) degR<degB

A(x)Ξ0 (mod xn) 就是说A(x)的0..n-1项系数都是0

A(x)B(x)Ξ1 (mod xn) 它们每一项都有xn,否则不可能余数只有1;所以也有xn/2;

注意:

1.最后要乘(n-1)! 不要乘(n-1)

2.多项式求逆元每次长度都不确定,不能先预处理二进制反转

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <cmath>
  6. using namespace std;
  7. typedef long long ll;
  8. const int N=3e5+;
  9. inline int read(){
  10. char c=getchar();int x=,f=;
  11. while(c<''||c>''){if(c=='-')f=-;c=getchar();}
  12. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  13. return x*f;
  14. }
  15. int P=,MOD=P;
  16. ll Pow(ll a,ll b,ll MOD){
  17. ll ans=;
  18. for(;b;b>>=,a=a*a%MOD)
  19. if(b&) ans=ans*a%MOD;
  20. return ans;
  21. }
  22. struct NTT{
  23. int n,rev[N];
  24. ll g;
  25. void ini(int m){
  26. n=;
  27. while(n<m) n<<=;
  28. /*
  29. int k=0;
  30. while((1<<k)<n) k++;
  31. for(int i=0;i<n;i++){
  32. int t=0;
  33. for(int j=0;j<k;j++) if(i&(1<<j)) t|=(1<<(k-j-1));
  34. rev[i]=t;
  35. }
  36. */
  37. g=;
  38. }
  39. void transform(int *a,int flag,int n){
  40. int k=;
  41. while((<<k)<n) k++;
  42. for(int i=;i<n;i++){
  43. int t=;
  44. for(int j=;j<k;j++) if(i&(<<j)) t|=(<<(k-j-));
  45. if(t<i) swap(a[i],a[t]);
  46. }
  47.  
  48. for(int l=;l<=n;l<<=){
  49. int m=l>>;
  50. ll wn=Pow(g,flag==?(P-)/l:P--(P-)/l,P);
  51. for(int *p=a;p!=a+n;p+=l){
  52. ll w=;
  53. for(int k=;k<m;k++){
  54. ll t=w*p[k+m]%P;
  55. p[k+m]=(p[k]-t+P)%P;
  56. p[k]=(p[k]+t)%P;
  57. w=w*wn%P;
  58. }
  59. }
  60. }
  61. if(flag==-){
  62. ll inv=Pow(n,P-,P);
  63. for(int i=;i<n;i++) a[i]=a[i]*inv%P;
  64. }
  65. }
  66. int c[N];
  67. void test(int *a,int n){for(int i=;i<n;i++) printf("%d ",a[i]);puts("");}
  68. void polyInv(int deg,int *a,int *b){
  69. if(deg==) b[]=Pow(a[],P-,P);
  70. else{
  71. polyInv((deg+)>>,a,b);
  72. int n=;
  73. while(n< deg<<) n<<=;
  74. copy(a,a+deg,c);
  75. fill(c+deg,c+n,);
  76. transform(c,,n);
  77. transform(b,,n);
  78. for(int i=;i<n;i++)
  79. b[i]=(ll)b[i]*(-(ll)b[i]*c[i]%P+P)%P;
  80. transform(b,-,n);
  81. fill(b+deg,b+n,);
  82. }
  83. }
  84. }fft;
  85. int n,inv[N],invFac[N],poc[N],A[N],B[N],C[N];
  86. void getInv(int n){
  87. inv[]=invFac[]=;
  88. for(int i=;i<=n;i++){
  89. if(i!=) inv[i]=-(ll)P/i*inv[P%i]%P;
  90. if(inv[i]<) inv[i]+=P;
  91. invFac[i]=(ll)invFac[i-]*inv[i]%P;
  92. }
  93. }
  94. int main(){
  95. //freopen("in","r",stdin);
  96. n=read();
  97. fft.ini(n);
  98. getInv(n);
  99.  
  100. poc[]=poc[]=;
  101. for(int i=;i<=n;i++) poc[i]=Pow(,(ll)i*(i-)>>%(P-),P);
  102. for(int i=;i<=n;i++) B[i]=(ll)poc[i]*invFac[i]%P;
  103. for(int i=;i<=n;i++) C[i]=(ll)poc[i]*invFac[i-]%P;//printf("CC %d\n",C[i]);
  104. fft.polyInv(fft.n,B,A);
  105.  
  106. fft.n<<=;
  107. fft.transform(A,,fft.n);
  108. fft.transform(C,,fft.n);
  109. for(int i=;i<fft.n;i++) A[i]=(ll)A[i]*C[i]%P;//,printf("ABC %d %d %d\n",i,A[i],C[i]);
  110.  
  111. fft.transform(A,-,fft.n);
  112. printf("%lld",(ll)A[n]*Pow(invFac[n-],P-,P)%P);
  113. }

BZOJ 3456: 城市规划 [多项式求逆元 DP]的更多相关文章

  1. BZOJ 3456: 城市规划 [多项式求逆元 组合数学 | 生成函数 多项式求ln]

    3456: 城市规划 题意:n个点组成的无向连通图个数 以前做过,今天复习一下 令\(f[n]\)为n个点的无向连通图个数 n个点的完全图个数为\(2^{\binom{n}{2}}\) 和Bell数的 ...

  2. BZOJ 3456: 城市规划 多项式求逆

    Description 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了.  刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使得整个国家的任意两个城市都直接 ...

  3. bzoj 3456 城市规划 多项式求逆+分治FFT

    城市规划 Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 1091  Solved: 629[Submit][Status][Discuss] Desc ...

  4. BZOJ 3456 城市规划 (组合计数、DP、FFT)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3456 著名的多项式练习题,做法也很多,终于切掉了纪念 首先求一波递推式: 令\(F(n ...

  5. bzoj 3456: 城市规划【NTT+多项式求逆】

    参考:http://blog.miskcoo.com/2015/05/bzoj-3456 首先推出递推式(上面的blog讲的挺清楚的),大概过程是正难则反,设g为n个点的简单(无重边无自环)无向图数目 ...

  6. [BZOJ 3456]城市规划(cdq分治+FFT)

    [BZOJ 3456]城市规划(cdq分治+FFT) 题面 求有标号n个点无向连通图数目. 分析 设\(f(i)\)表示\(i\)个点组成的无向连通图数量,\(g(i)\)表示\(i\)个点的图的数量 ...

  7. 51NOD 1258 序列求和 V4 [任意模数fft 多项式求逆元 伯努利数]

    1258 序列求和 V4 题意:求\(S_m(n) = \sum_{i=1}^n i^m \mod 10^9+7\),多组数据,\(T \le 500, n \le 10^{18}, k \le 50 ...

  8. 多项式求逆元详解+模板 【洛谷P4238】多项式求逆

    概述 多项式求逆元是一个非常重要的知识点,许多多项式操作都需要用到该算法,包括多项式取模,除法,开跟,求ln,求exp,快速幂.用快速傅里叶变换和倍增法可以在$O(n log n)$的时间复杂度下求出 ...

  9. BZOJ 3456: 城市规划 与 多项式求逆算法介绍(多项式求逆, dp)

    题面 求有 \(n\) 个点的无向有标号连通图个数 . \((1 \le n \le 1.3 * 10^5)\) 题解 首先考虑 dp ... 直接算可行的方案数 , 容易算重复 . 我们用总方案数减 ...

随机推荐

  1. Solr6.0与Jetty、Tomcat在Win环境下搭建/部署

    摘要: Solr6的新特性包括增强的edismax,对SQL更好的支持--并行SQL.JDBC驱动.更多的SQL语法支持等,并且在Solr6发布以后,Solr5还在持续更新,对于想尝鲜Solr6的用户 ...

  2. load和DOMContenLoaded的区别

    load和DOMContentLoaded的作用就是当页面加载完成的时候自动执行,但他们执行的时间点是不一样的. DOM文档加载步骤: (1)解析html结构 (2)加载外部脚本和样式表文件 (3)解 ...

  3. sublime 中HTML快捷键

  4. 修真院java后端工程师学习课程--任务1(day one)

    这是我从学习资料-线下报名-北京报名截取的报名截图,从图中我们可以看出我们的报名对象应该有姓名,qq,修真类型,预计入学时间,毕业院校,线上学号,日报链接,立愿,辅导师兄等属性,其中线上学号是主码. ...

  5. Linux的运行级别详细说明

    Linux 7个运行级别    # 0 - 停机(千万不要把initdefault设置为0 )     # 1 - 单用户模式     # 2 - 多用户,但是没有NFS     # 3 - 完全多用 ...

  6. Maven打包时去掉项目版本号

    Maven打包后,jar或war文件名里带有版本号信息,如projectname0.0.1-SNAPSHOT.jar等,怎么去掉呢? 解决办法: 打开项目pom.xml文件,在<build> ...

  7. HTML怎么设置字与字之间的间距代替空格

    空格: &nbsp CSS: letter-spacing字与字 word-spacing词与词 行距:line-height:1.5; 段落:<p style="margin ...

  8. 如何用vue实现树形菜单?

    在公司培训了2周,布置的作业是从树形,grid分页以及echarts中选一个.由于都不是很熟,就挑了第一个.本来想在网上找找参考,然后模仿着做一个,但是网上的代码多少参差不齐,写到一半没了,所以只要自 ...

  9. Redis-配置认证密码

    1.找到redis.conf,配置密码 2.要重新启动一下redis 3.用redis-cli重新登陆,我们查询的时候提示"Authentication required"查询失败 ...

  10. 通过反编译深入理解Java String及intern(转)

    通过反编译深入理解Java String及intern 原文传送门:http://www.cnblogs.com/paddix/p/5326863.html 一.字符串问题 字符串在我们平时的编码工作 ...