题目分析:

容易想到生成函数的构造方法。

令g(n)表示n个点的无向图个数,f(n)表示n个点的无向连通图的个数。式子是显然的。

容易发现式子是卷积的形式,写出生成函数,然后多项式求逆后多项式乘法即可。

代码:

  

#include<bits/stdc++.h>
using namespace std; int n; const int maxn = ;
const int mod = ;
const int gg = ; int A[maxn],B[maxn],IB[maxn],B0[maxn],F[maxn];
int fac[maxn/],ord[maxn]; int fast_pow(int now,long long pw){
if(pw == ) return ;
if(pw == ) return now;
int z = fast_pow(now,pw/);
z = (1ll*z*z)%mod;
if(pw & ) z = (1ll*z*now)%mod;
return z;
} void FFT(int *d,int len,int dr){
for(int i=;i<len;i++) if(ord[i] < i) swap(d[i],d[ord[i]]);
for(int i=;i<len;i<<=){
int wn = fast_pow(gg,(mod-)/(i<<));
if(dr == -) wn = fast_pow(wn,mod-);
for(int j=;j<len;j+=(i<<)){
int w = ;
for(int k=;k<i;k++,w=(1ll*w*wn)%mod){
int x = d[j+k],y = (1ll*w*d[j+k+i])%mod;
d[j+k] = (x+y)%mod; d[j+k+i] = (x-y)%mod;
if(d[j+k+i] < ) d[j+k+i]+=mod;
}
}
}
if(dr == -){
int iv = fast_pow(len,mod-);
for(int i=;i<len;i++) d[i] = (1ll*d[i]*iv)%mod;
}
} void GetA(){
for(int i=;i<=n;i++)
A[i] = (1ll*fast_pow(,1ll*i*(i-)/)*fast_pow(fac[i-],mod-))%mod;
} void GetB(){
for(int i=;i<=n;i++)
B[i] = (1ll*fast_pow(,1ll*i*(i-)/)*fast_pow(fac[i],mod-))%mod;
} void Inv(){
IB[] = fast_pow(B[],mod-);
int res = ;
while(res < n+) res=res<<;
for(int i=,j=;i<=res;i<<=,j++){
int bit = i*,om = j+;
for(int k=;k<i;k++) B0[k] = B[k];
for(int k=;k<bit;k++) ord[k]=(ord[k>>]>>)+((k&)<<om-);
FFT(IB,bit,);FFT(B0,bit,);
for(int k=;k<bit;k++) B0[k]=(1ll*B0[k]*((1ll*IB[k]*IB[k])%mod))%mod;
for(int k=;k<bit;k++) IB[k] = (1ll**IB[k]-B0[k]+mod)%mod;
FFT(IB,bit,-);
for(int k=i;k<*i;k++) IB[k] = ;
}
for(int i=n;i<=res;i++) IB[i] = ;
} void Multi(){
int res = ,len = ;
while(res < *n+)res = res<<,len++;
for(int i=;i<res;i++) ord[i]=(ord[i>>]>>)+((i&)<<len-);
FFT(IB,res,);FFT(A,res,);
for(int i=;i<res;i++) F[i] = (1ll*A[i]*IB[i])%mod;
FFT(F,res,-);
} void work(){fac[] = ;
for(int i=;i<=n;i++) fac[i] = (1ll*fac[i-]*i)%mod;
GetA();
GetB();
Inv();
Multi();
F[n] = (1ll*F[n]*fac[n-])%mod;
printf("%d",F[n]);
} int main(){
scanf("%d",&n);
work();
return ;
}

BZOJ3456 城市规划 【生成函数】【FFT】的更多相关文章

  1. [BZOJ3456]城市规划(生成函数+多项式求逆+多项式求ln)

    城市规划 时间限制:40s      空间限制:256MB 题目描述 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了.  刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一 ...

  2. loj6570 毛毛虫计数(生成函数FFT)

    link 巨佬olinr的题解 <-- olinr很强 考虑生成函数 考虑直径上点数>=4的毛毛虫的直径,考虑直径中间那些节点以及他上面挂的那些点的EGF \(A(x)=\sum_{i\g ...

  3. bzoj 3456 城市规划 —— 分治FFT / 多项式求逆 / 指数型生成函数(多项式求ln)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3456 首先考虑DP做法,正难则反,考虑所有情况减去不连通的情况: 而不连通的情况就是那个经典 ...

  4. 2019.01.03 bzoj3456: 城市规划(生成函数+多项式取对)

    传送门 生成函数好题. 题意:求n个点的简单(无重边无自环)无向连通图数目 思路: 对简单无向图构造生成函数f(x)=∑n2Cn2xnn!f(x)=\sum_n2^{C_n^2}\frac{x^n}{ ...

  5. bzoj 3456 城市规划——分治FFT / 多项式求逆 / 多项式求ln

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3456 分治FFT: 设 dp[ i ] 表示 i 个点时连通的方案数. 考虑算补集:连通的方 ...

  6. BZOJ3456城市规划

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

  7. 挑选队友 (生成函数 + FFT + 分治)

    链接:https://www.nowcoder.com/acm/contest/133/D来源:牛客网 题目描述 Applese打开了m个QQ群,向群友们发出了组队的邀请.作为网红选手,Applese ...

  8. 【BZOJ3771】Triple 生成函数 FFT 容斥原理

    题目大意 有\(n\)把斧头,不同斧头的价值都不同且都是\([0,m]\)的整数.你可以选\(1\)~\(3\)把斧头,总价值为这三把斧头的价值之和.请你对于每种可能的总价值,求出有多少种选择方案. ...

  9. BZOJ3456 城市规划 【多项式求ln】

    题目链接 BZOJ3456 题解 真是一道经典好题,至此已经写了分治\(NTT\),多项式求逆,多项式求\(ln\)三种写法 我们发现我们要求的是大小为\(n\)无向联通图的数量 而\(n\)个点的无 ...

随机推荐

  1. kubespray -- k8s集群dashboard 访问方式

    1.参考这篇文章: https://github.com/kubernetes/dashboard/wiki/Creating-sample-user 创建用户 2.获取token 3.kubectl ...

  2. 【数据库摘要】10_Sql_Create_Index

    CREATE INDEX 语句 CREATE INDEX 语句用于在表中创建索引. 在不读取整个表的情况下.索引使数据库应用程序能够更快地查找数据. 索引 您能够在表中创建索引,以便更加高速高效地查询 ...

  3. core_cm4_simd.h文件是干嘛的?

    core_cm4_simd.h文件用于simd指令,即单指令多数据流,这个只有ARMv7架构才有,Cortex m3 m4 m7是ARMv7架构,而Cortex m0 m1是没有的. 所以,在新建Co ...

  4. KVM虚拟机管理——资源调整

    1. 概述2. 计算资源调整2.1 调整处理器配置2.2 调整内存配置3. 存储资源调整3.1 根分区扩展3.2 添加磁盘4. 网络资源调整 1. 概述 KVM在使用过程中,会涉及到计算(CPU,内存 ...

  5. package.json中的几种依赖注册对象解析

    本博文根据官网+google翻译+自己的理解,欢迎指出翻译的不到位的地方. package.json的重要性不言而喻,一直以来对几种依赖注册对象的区别和作用不是很了解,今日一探究竟. dependen ...

  6. SE Springer小组之《Spring音乐播放器》可行性研究报告五、六

    5 可选择的其他系统方案 曾经考虑过制作闹钟系统,但考虑到闹钟系统在电脑应用中极其不实用,所以此方案未通过. 6 投资及效益分析 6.1支出 本软件只用于完成课程学习要求,不用做商用,无基础设备等支出 ...

  7. shiro课程的学习

    1.shiro的课程目标 (1)shiro的整体框架 各组件的概念 (2)shiro 认证 授权的过程 (3)shiro自定义的Reaml Filter (4)shiro session 管理 (5) ...

  8. boost::asio之(一)简单客户端服务器回显功能

    客户端: // BoostDev.cpp: 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #inc ...

  9. Apollo的Oracle适配

    Apollo的Oracle适配改动   这几天工作需要使用Apollo配置中心.Apollo唯一的依赖是MySQL数据库,然而公司只有Oracle数据库资源.这里有一个Oracle适配改动的分支,但是 ...

  10. Spring注解 开发