bzoj3456:城市规划
传送门
感觉这个题是真的神仙啊,思路是真的难想
首先设\(f(i)\)为\(i\)个点的无向连通图个数,然后设\(g(i)\)为\(i\)个点的图的个数(注意,此处不一定联通)
那么我们考虑枚举\(1\)号点所在的联通块的大小
显然有
\[ g(n)=\sum_{i=1}^nf(i)\binom{n-1}{i-1}g(n-i)\\ \]
考虑到
\[ g(n)=2^{\binom{n}{2}}\\ \]
所以有
\[ \sum_{i=1}^{n}f(i)\binom{n-1}{i-1}2^{\binom{n-i}{2}}=2^{\binom{n}{2}}\\ \]
后面的应该就很好推了,这个题主要的难点是考虑枚举\(1\)所在的联通块大小
后面还是套路,把组合数拆开
\[ \sum_{i=1}^nf(i)\frac{(n-1)!}{(n-i)!(i-1)!}2^{\binom{n-i}{2}}=2^{\binom{n}{2}}\\ \]
把相同项移到一起去
\[ \sum_{i=1}^n\frac{f(i)}{(i-1)!}\frac{2^{\binom{n-i}{2}}}{(n-i)!}=\frac{2^{\binom{n}{2}}}{(n-1)!}\\ \]
这个式子已经很眼熟了,再设
\[ A(x)=\sum_{i=0}\frac{f(i)}{(i-1)!}x^i\\ B(x)=\sum_{i=0}\frac{2^{\binom{i}{2}}}{i!}x^i\\ C(x)=\sum_{i=0}\frac{2^{\binom{i}{2}}}{(i-1)!}x^i\\ \]
很显然有
\[ C(x)=A(x)B(x)\\ A(x)=C(x)B(x)^{-1} \]
然后就可以多项式求逆+NTT了
代码:
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<queue>
#include<cmath>
using namespace std;
void read(int &x){char ch;bool ok;for(ok=0,ch=getchar();!isdigit(ch);ch=getchar())if(ch=='-')ok=1;for(x=0;isdigit(ch);x=x*10+ch-'0',ch=getchar());if(ok)x=-x;
}
#define rg register
const int maxn=4e5+10,mod=1004535809,g=3,gi=334845270,modd=mod-1;
int n,a[maxn],b[maxn],c[maxn],m,fac[maxn],inv[maxn],len,ans,r[maxn],mx;
int mul(int x,int y){return 1ll*x*y-1ll*x*y/mod*mod;}
int add(int x,int y){return x+y>=mod?x+y-mod:x+y;}
int del(int x,int y){return x-y<0?x-y+mod:x-y;}
int mi(int a,int b){int ans=1;while(b){if(b&1)ans=mul(ans,a);b>>=1,a=mul(a,a);}return ans;
}
void ntt(int *a,int n,int f){for(rg int i=0;i<n;i++)if(r[i]>i)swap(a[i],a[r[i]]);for(rg int i=1;i<n;i<<=1){int wn=mi(f?g:gi,(mod-1)/(i<<1));for(rg int j=0;j<n;j+=i<<1){int w=1;for(rg int k=0;k<i;k++){int x=a[j+k],y=mul(w,a[i+j+k]);a[j+k]=add(x,y),a[j+k+i]=del(x,y),w=mul(w,wn);}}}if(f)return ;int inv=mi(n,mod-2);for(rg int i=0;i<n;i++)a[i]=mul(a[i],inv);
}
void get_inv(int *b,int n){if(n==1)return b[0]=mi(a[0],mod-2),void();get_inv(b,(n+1)>>1);m=n;len=0;for(n=1;n<=m<<1;n<<=1)len++;for(rg int i=0;i<n;i++)r[i]=(r[i>>1]>>1)|((i&1)<<(len-1));for(rg int i=0;i<n;i++)c[i]=a[i];for(rg int i=m;i<n;i++)c[i]=0;ntt(b,n,1),ntt(c,n,1);for(rg int i=0;i<n;i++)b[i]=del(mul(2,b[i]),mul(mul(c[i],b[i]),b[i]));ntt(b,n,0);for(rg int i=m;i<n;i++)b[i]=0;
}
int main(){read(n);fac[0]=inv[0]=1;for(rg int i=1;i<=n;i++)fac[i]=mul(fac[i-1],i);inv[n]=mi(fac[n],mod-2);for(rg int i=n-1;i;i--)inv[i]=mul(inv[i+1],i+1);for(rg int i=0;i<=n;i++)a[i]=mul(mi(2,1ll*i*(i-1)/2%modd),inv[i]);get_inv(b,n);n++;for(rg int i=1;i<n;i++)c[i]=mul(mi(2,1ll*i*(i-1)/2%modd),inv[i-1]);m=n;len=0;for(n=1;n<=m<<1;n<<=1)len++;for(rg int i=0;i<n;i++)r[i]=(r[i>>1]>>1)|((i&1)<<(len-1));ntt(b,n,1),ntt(c,n,1);for(rg int i=0;i<n;i++)b[i]=mul(b[i],c[i]);ntt(b,n,0);printf("%d\n",mul(b[m-1],fac[m-2]));
}
转载于:https://www.cnblogs.com/lcxer/p/10767913.html
bzoj3456:城市规划相关推荐
- [BZOJ3456]城市规划
[BZOJ3456]城市规划 试题描述 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了. 刚才说过, 阿狸的国家有 \(n\) 个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使得整 ...
- bzoj3456: 城市规划
Description 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了. 刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使得整个国家的任意两个城市都直接 ...
- 指数型生成函数[bzoj3456]城市规划
前言 打完多项式板子后的第一题+清真的题意 题目相关 题目链接 题目大意 求nnn个点的简单(无重边无自环)无向连通图数目 输出模1004535809(479∗221+1)1004535809(479 ...
- 【多项式求逆】[BZOJ3456]城市规划
题目描述 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了. 刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使得整个国家的任意两个城市都直接或间接的连通. ...
- 【BZOJ-3456】城市规划 CDQ分治 + NTT
题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=3456 Solution 这个问题可以考虑dp,利用补集思想 N个点的简单图总数量为$2^{ ...
- 【BZOJ3456】【CDQ分治+FNT】城市规划
试题来源 2013中国国家集训队第二次作业 问题描述 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了. 刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使得 ...
- (每日一题)P4841 [集训队作业2013]城市规划 (无向连通图计数)(普通生成函数 + 多项式求逆)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 每日一题(莫反 / 多项式 / 母函数 / 群论) 2021.4.14 生成函数 + 多项式求逆 Pr ...
- BZOJ 3456: 城市规划 [多项式求逆元 DP]
题意: 求出n个点的简单(无重边无自环)无向连通图数目. 方案数mod 1004535809(479 * 2 ^ 21 + 1)即可. n<=130000 DP求方案 g(n) n个点所有图的方 ...
- 基于问题导向与成果产出的教学模式:《大数据与城市规划》特色课程
[ 编者按 ]2015年12月,清华大学推出"大数据能力提升项目",旨在促进大数据人才培养,服务国家大数据发展战略.项目由清华-青岛数据科学研究院(以下简称:数据院)和研究生院共同 ...
最新文章
- python matplotlib画数据分布图_Python数据可视化之matplotlib
- 千万QPS毫秒响应:快手数据中台建设实践
- linux 视频相关资源
- 服务器可以ping通,Write failed: Broken pipe
- 「 深入浅出 」集合List
- [云炬创业基础笔记]第二章创业者测试20
- 开发工作中平常 能用到的 Git 常用命令
- 如鹏网 net高级技术 第二章 委托和事件(复习)
- julia有没有希望超越python_未来5-10年,Julia会替代Python成为量化投资热门语言吗?...
- 跨境电商独立站模式解析与机会分析?
- 编译Java程序一共要安装什么_如何编译java程序
- GitHub优秀移动开源项目大集合
- 16位图xxxxxxxxxxxx
- 磁珠的串联和并联分析:
- 图神经网络详解(四)
- vivo手机怎么弄html,vivo手机怎么更改默认应用设置
- 三星堆火了,VR科技如何唤醒千年文明?
- 【408数据结构】备考常见必会算法图鉴
- 调试输出信息OutPutDebugString
- 金融工程学(一):概述
热门文章
- hannoi塔java程序_基于Java实现的Hannoi汉诺塔自动演示程序
- 静态导入 java面试_Java面试系列【静态导入】-静态导入,基础篇
- base64转化字节流 js_js - blob流和base64,以及file和base64的相互转换
- Java 的内存分类
- geotools绘制椭圆API
- springboot的aop里的 @Pointcut()里的配置
- SpringBoot启动错误 If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
- Linux应用基本命令实验,实验二 linux基本命令的使用
- ulimit限制 新系统_graylog日志分析系统上手教程
- C# 封装的功能强大的中国农历日历操作类的代码