[带标号无向连通图计数 容斥原理 多项式求逆 多项式求ln 模板题] BZOJ 3456 城市规划
来源:互联网 发布:淘宝怎么赚运费险 编辑:程序博客网 时间:2024/05/17 06:35
可以通过容斥求出答案的表达式
其中前一部分表示i个点任意连边 后半部分枚举1所在的连通块然后容斥掉
这是个卷积的形式 分别令
所以
那么
这个多项式求逆下就好了
UPD:
这里提到了另一种简洁的理解方法
n个标号点任意无向图的EGF为
n个标号点连通无向图的EGF为
根据
也就是
多项式求ln? 把两边同时取导数
也就是一个 求导 求逆 乘法 积分
我们发现这和之前的方法是一致的
实际上
#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;const int N=600005;const int P=1004535809;const int G=3;inline int Pow(ll a,int b){ ll ret=1; for (;b;b>>=1,a=a*a%P) if (b&1) ret=ret*a%P; return (int)ret;}int num;int w[2][N];inline void Pre(int n){ num=n; int g=Pow(G,(P-1)/num),invg=Pow(g,P-2); w[0][0]=w[1][0]=1; for (int i=1;i<num;i++) w[0][i]=(ll)w[0][i-1]*invg%P,w[1][i]=(ll)w[1][i-1]*g%P;}int R[N];inline void FFT(int *a,int n,int r){ 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) for (int j=0;j<n;j+=(i<<1)) for (int k=0;k<i;k++){ ll x=a[j+k],y=(ll)w[r][num/(i<<1)*k]*a[j+i+k]%P; a[j+k]=(x+y)%P; a[j+i+k]=(x+P-y)%P; } if (!r) for (int i=0,inv=Pow(n,P-2);i<n;i++) a[i]=(ll)a[i]*inv%P;}inline void GetInv(int *a,int *b,int n){ static int tmp[N]; if (n==1) return void(b[0]=Pow(a[0],P-2)); GetInv(a,b,n>>1); for (int i=0;i<n;i++) tmp[i]=a[i],tmp[n+i]=0; int L=0; while (!(n>>L&1)) L++; for (int i=1;i<(n<<1);i++) R[i]=(R[i>>1]>>1)|((i&1)<<L); FFT(tmp,n<<1,1); FFT(b,n<<1,1); for (int i=0;i<(n<<1);i++) tmp[i]=(ll)b[i]*(2+P-(ll)tmp[i]*b[i]%P)%P; FFT(tmp,n<<1,0); for (int i=0;i<n;i++) b[i]=tmp[i],b[n+i]=0;}int n,m;ll fac[N];int A[N],B[N],C[N],invB[N];int main(){ freopen("t.in","r",stdin); freopen("t.out","w",stdout); scanf("%d",&n); for (m=1;m<=n;m<<=1); Pre(m<<1); fac[0]=1; for (int i=1;i<=n;i++) fac[i]=fac[i-1]*i%P; for (int i=0;i<=n;i++) B[i]=(ll)Pow(2,((ll)i*(i-1)>>1)%(P-1))*Pow(fac[i],P-2)%P; for (int i=1;i<=n;i++) C[i]=(ll)Pow(2,((ll)i*(i-1)>>1)%(P-1))*Pow(fac[i-1],P-2)%P; GetInv(B,invB,m); FFT(invB,m<<1,1); FFT(C,m<<1,1); for (int i=0;i<m<<1;i++) A[i]=(ll)invB[i]*C[i]%P; FFT(A,m<<1,0); printf("%lld\n",A[n]*fac[n-1]%P); return 0;}
0 0
- [带标号无向连通图计数 容斥原理 多项式求逆 多项式求ln 模板题] BZOJ 3456 城市规划
- [带标号DAG计数 容斥原理 多项式求逆 多项式求ln] COGS 有标号的DAG计数系列
- 【XSY1332】【BZOJ3456】轩辕朗的城市规划 无向连通图计数 CDQ分治 FFT 多项式求逆 多项式ln
- BZOJ 3456 城市规划 多项式求ln
- [n点无向图个数 分治FFT || 多项式求逆] BZOJ 3456 城市规划
- bzoj 3456: 城市规划 NTT+多项式求逆
- [BZOJ3456]城市规划(组合数学+容斥原理+NTT+多项式求逆)
- bzoj 3456: 城市规划 (NTT+多项式求逆)
- [生成函数][NTT][多项式求逆]BZOJ 3456: 城市规划
- 【多项式求逆】[BZOJ3456]城市规划
- [BZOJ3456] [多项式求逆] 城市规划
- [多项式求逆 模板题] BZOJ 4555 [Tjoi2016&Heoi2016]求和
- 多项式求逆
- 多项式求逆
- [BZOJ3456] 城市规划 - 快速傅里叶变换 - 快速数论变换 - 卷积 - 多项式求逆
- 多项式求逆 与 多项式开方
- 带标号的连通图计数
- 带标号的连通图计数
- UVA-11183-Teen Girl Squad(最小树形图模板)
- JAVA操作FTP
- ListView嵌套在ScrollView中,只显示一行的解决办法
- 创业日志(七)金钱观
- Git 小白进阶整理
- [带标号无向连通图计数 容斥原理 多项式求逆 多项式求ln 模板题] BZOJ 3456 城市规划
- 设计理念要以人为本
- MySql 5.7 无法创建用户
- PAT Head of a Gang
- 埃拉托色尼筛选法
- spring boot logback.xml 文件 配置出力到linux 下的系统log
- Node实践总结6——多表查询
- 统计 最小 、最大、平均值
- 常见前端面试题及答案(下)