传送门

感觉这个题是真的神仙啊,思路是真的难想

首先设\(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:城市规划相关推荐

  1. [BZOJ3456]城市规划

    [BZOJ3456]城市规划 试题描述 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了. 刚才说过, 阿狸的国家有 \(n\) 个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使得整 ...

  2. bzoj3456: 城市规划

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

  3. 指数型生成函数[bzoj3456]城市规划

    前言 打完多项式板子后的第一题+清真的题意 题目相关 题目链接 题目大意 求nnn个点的简单(无重边无自环)无向连通图数目 输出模1004535809(479∗221+1)1004535809(479 ...

  4. 【多项式求逆】[BZOJ3456]城市规划

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

  5. 【BZOJ-3456】城市规划 CDQ分治 + NTT

    题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=3456 Solution 这个问题可以考虑dp,利用补集思想 N个点的简单图总数量为$2^{ ...

  6. 【BZOJ3456】【CDQ分治+FNT】城市规划

    试题来源 2013中国国家集训队第二次作业 问题描述 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了. 刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使得 ...

  7. (每日一题)P4841 [集训队作业2013]城市规划 (无向连通图计数)(普通生成函数 + 多项式求逆)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 每日一题(莫反 / 多项式 / 母函数 / 群论) 2021.4.14 生成函数 + 多项式求逆 Pr ...

  8. BZOJ 3456: 城市规划 [多项式求逆元 DP]

    题意: 求出n个点的简单(无重边无自环)无向连通图数目. 方案数mod 1004535809(479 * 2 ^ 21 + 1)即可. n<=130000 DP求方案 g(n) n个点所有图的方 ...

  9. 基于问题导向与成果产出的教学模式:《大数据与城市规划》特色课程

    [ 编者按 ]2015年12月,清华大学推出"大数据能力提升项目",旨在促进大数据人才培养,服务国家大数据发展战略.项目由清华-青岛数据科学研究院(以下简称:数据院)和研究生院共同 ...

最新文章

  1. python matplotlib画数据分布图_Python数据可视化之matplotlib
  2. 千万QPS毫秒响应:快手数据中台建设实践
  3. linux 视频相关资源
  4. 服务器可以ping通,Write failed: Broken pipe
  5. 「 深入浅出 」集合List
  6. [云炬创业基础笔记]第二章创业者测试20
  7. 开发工作中平常 能用到的 Git 常用命令
  8. 如鹏网 net高级技术 第二章 委托和事件(复习)
  9. julia有没有希望超越python_未来5-10年,Julia会替代Python成为量化投资热门语言吗?...
  10. 跨境电商独立站模式解析与机会分析?
  11. 编译Java程序一共要安装什么_如何编译java程序
  12. GitHub优秀移动开源项目大集合
  13. 16位图xxxxxxxxxxxx
  14. 磁珠的串联和并联分析:
  15. 图神经网络详解(四)
  16. vivo手机怎么弄html,vivo手机怎么更改默认应用设置
  17. 三星堆火了,VR科技如何唤醒千年文明?
  18. 【408数据结构】备考常见必会算法图鉴
  19. 调试输出信息OutPutDebugString
  20. 金融工程学(一):概述

热门文章

  1. hannoi塔java程序_基于Java实现的Hannoi汉诺塔自动演示程序
  2. 静态导入 java面试_Java面试系列【静态导入】-静态导入,基础篇
  3. base64转化字节流 js_js - blob流和base64,以及file和base64的相互转换
  4. Java 的内存分类
  5. geotools绘制椭圆API
  6. springboot的aop里的 @Pointcut()里的配置
  7. SpringBoot启动错误 If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
  8. Linux应用基本命令实验,实验二 linux基本命令的使用
  9. ulimit限制 新系统_graylog日志分析系统上手教程
  10. C# 封装的功能强大的中国农历日历操作类的代码