BZOJ3456:城市规划——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=3456
求出n个点的简单(无重边无自环)无向连通图数目
模数很熟悉,先敲一个NTT。
然后通过推导式子就做完啦!
我觉得就算怎么讲也没有下面这一位好:http://blog.miskcoo.com/2015/05/bzoj-3456
另外多项式求逆:http://blog.miskcoo.com/2015/05/polynomial-inverse
至少我学到了:当你有个卷积知道答案,求卷积的一项时转换成生成函数再FFT一下就好了。
#include<cstdio>
#include<cctype>
#include<cstring>
#include<vector>
#include<cmath>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long ll;
const ll P=;
const int G=;
const int N=5e5+;
ll qpow(ll a,ll n,ll p){
ll res=;
while(n){
if(n&)res=res*a%p;
a=a*a%p;n>>=;
}
return res;
}
void MTT(ll a[],int n,int on){
for(int i=,j=n>>;i<n-;i++){
if(i<j)swap(a[i],a[j]);
int k=n>>;
while(j>=k){j-=k;k>>=;}
if(j<k)j+=k;
}
for(int i=;i<=n;i<<=){
ll res=qpow(G,(P-)/i,P);
for(int j=;j<n;j+=i){
ll w=;
for(int k=j;k<j+i/;k++){
ll u=a[k],t=w*a[k+i/]%P;
a[k]=(u+t)%P;
a[k+i/]=(u-t+P)%P;
w=w*res%P;
}
}
}
if(on==-){
ll inv=qpow(n,P-,P);
a[]=a[]*inv%P;
for(int i=;i<=n/;i++){
a[i]=a[i]*inv%P;
if(i!=n-i)a[n-i]=a[n-i]*inv%P;
swap(a[i],a[n-i]);
}
}
}
ll t[N];
void inv(int deg,ll a[],ll b[]){
if(deg==){
b[]=qpow(a[],P-,P);
return;
}
inv((deg+)>>,a,b);
int n=;
while(n<(deg<<))n<<=;
for(int i=;i<deg;i++)t[i]=a[i];
for(int i=deg;i<n;i++)t[i]=;
MTT(t,n,);MTT(b,n,);
for(int i=;i<n;i++)
b[i]=b[i]*(-b[i]*t[i]%P+P)%P;
MTT(b,n,-);
for(int i=deg;i<n;i++)b[i]=;
}
int n;
ll f[N],g[N],tmp[N],c[N],jc[N],C[N][];
inline void init(){
jc[]=jc[]=;C[][];
for(int i=;i<=n;i++)jc[i]=jc[i-]*i%P;
for(int i=;i<=n;i++)C[i][]=C[i-][]+i-;
}
int main(){
scanf("%d",&n);init();
for(int i=;i<=n;i++){
g[i]=qpow(,C[i][],P)*qpow(jc[i],P-,P)%P;
if(i)c[i]=qpow(,C[i][],P)*qpow(jc[i-],P-,P)%P;
}
int nn=;
while(nn<=n)nn<<=; inv(nn,g,tmp);memcpy(g,tmp,sizeof(tmp)); MTT(g,nn,);MTT(c,nn,);
for(int i=;i<nn;i++)f[i]=g[i]*c[i]%P;
MTT(f,nn,-); f[n]=f[n]*jc[n-]%P;
printf("%lld\n",f[n]);
return ;
}
+++++++++++++++++++++++++++++++++++++++++++
+本文作者:luyouqi233。 +
+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/ +
+++++++++++++++++++++++++++++++++++++++++++
BZOJ3456:城市规划——题解的更多相关文章
- BZOJ3456 城市规划 【多项式求ln】
题目链接 BZOJ3456 题解 真是一道经典好题,至此已经写了分治\(NTT\),多项式求逆,多项式求\(ln\)三种写法 我们发现我们要求的是大小为\(n\)无向联通图的数量 而\(n\)个点的无 ...
- [BZOJ3456]城市规划(生成函数+多项式求逆+多项式求ln)
城市规划 时间限制:40s 空间限制:256MB 题目描述 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了. 刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一 ...
- BZOJ3456 城市规划 【多项式求逆】
题目链接 BZOJ3456 题解 之前我们用分治\(ntt\)在\(O(nlog^2n)\)的复杂度下做了这题,今天我们使用多项式求逆 设\(f_n\)表示\(n\)个点带标号无向连通图数 设\(g_ ...
- BZOJ3456 城市规划 【分治NTT】
题目链接 BZOJ3456 题解 据说这题是多项式求逆 我太弱不会QAQ,只能\(O(nlog^2n)\)分治\(NTT\) 设\(f[i]\)表示\(i\)个节点的简单无向连通图的数量 考虑转移,直 ...
- BZOJ3456: 城市规划
Description 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了. 刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使得整个国家的任意两个城市都直接或 ...
- BZOJ3456城市规划
题目描述 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了.刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使得整个国家的任意两个城市都直接或间接的连通.为了 ...
- BZOJ3456 城市规划(多项式求逆)
设f[i]为连通图的数量,g[i]为不连通图的数量,显然有f[i]=2i*(i-1)/2-g[i],g[i]通过枚举1所在连通块大小转移,有g[i]=Σf[j]*C(i-1,j-1)·2(i-j)*( ...
- bzoj3456城市规划 多项式取模
題目大意 求出有n个点的有标号简单连通无向图的数目. 题解 什么破玩意,直接输出\(2^{C_n^2}\)走人 我们发现这张图要求连通,而上式肯定不能保证连通. 其实上式表示的是不保证连通的有标号简单 ...
- BZOJ3456 城市规划 【生成函数】【FFT】
题目分析: 容易想到生成函数的构造方法. 令g(n)表示n个点的无向图个数,f(n)表示n个点的无向连通图的个数.式子是显然的. 容易发现式子是卷积的形式,写出生成函数,然后多项式求逆后多项式乘法即可 ...
随机推荐
- PS 给天空添加蓝天白云<转载>
https://jingyan.baidu.com/article/b2c186c8e83b1cc46ef6ffee.html 给图片添加蓝天白云的步骤: 1.打开要加蓝天白云的照片.(如图一) [图 ...
- 「日常训练」Caterpillar(POJ-3310)
题意与分析 一条很有趣的题目.给一个无向图,问它是否无环,且可以在上面找到一条线,使所有的顶点要么在线上要么不在线上但在与线相连的边上. 那么首先要确定所有点联系在一起.这个可以同判环一起处理:如果建 ...
- Qt-LCD电子时钟
先上效果图吧 就是这个样子,简单的时间显示时间. 这里需要注意的是,我们最好建立一个空文件,这里我们需要建立一个集成QLCDNumber的类 具体方法如下图 一下是源代码 digiclock.h #i ...
- python操作字符串内容并重新输出
今天在做一个函数的作业,题目如下: 编写一个函数实现大写转小写,小写变大写,并且转换为镜像字符串,并且将字符串变为镜像字符串. 例如:’A’变为’Z’,’b’变为’y 示范字符串: ”sdSdsfdA ...
- Jenkins 配置邮箱 530Authentication required ,535 uthentication failed 的解决方法
错误 解决方法 530 Authentication required 需要展开SMTP认证,输入SMTP server能识别的用户信息 535 authentication failed 输 ...
- Linux命令应用大词典-第9章 数字计算
9.1 bc:任意精度的计算器 9.2 dc:一个任意精度的计算器 9.3 expr:将表达式的值打印到标准输出 9.1 bc:任意精度的计算器 9.2 dc:一个任意精度的计算器 9.3 expr: ...
- Java并发基础--Lock的学习
一.Lock的出现 Lock的主要作用实现线程之间的同步互斥,与synchronized关键字的效果是一样的,synchronized是Java语言内置的特性,那么为什么又出现了Lock呢?原因是sy ...
- python 终极篇 ---- 中间件
中间件------------------------>>>>>>>>>>>>> 中间件是一个用来处理django的响应与 ...
- 简单的图片滑动效果插件 jQuery.iocnSlider.js
近几日在制作一个客户引导页面,其中有一个图片展示而且带滑动的效果.好久没练手了,索性自己写一个插件吧. 依据设计原型,需要满足两套分辨率下图片不同的尺寸,所以在css中使用了media query的相 ...
- php面试的那些“黑话”
以下是一些常见的面试暗语,求职者一定要弄清楚其中蕴含的深意,不然可能“躺着也中枪”,最后只能铩羽而归. (1)请把简历先放在这,有消息我们会通知你的 面试官说出这句话,则表明他对你已经“兴趣不大”,为 ...