题意:

求n个点的无相连通图的个数。有编号

思路一:

黏博客

至于为什么除以k!:(没有博客中说的那么简单)

实际上,

对于一个n的用k个自然数的拆分,每一个拆分的贡献是:

$\frac{n!*\Pi contribution}{\Pi cnt[i]!*\Pi i!}$这里i是所有出现过的自然数,cnt表示出现次数

因为认为集合两两之间都是不同的,但是对于相同的i,会计算多次。要除以出现次数的阶乘。对于不同的i,本身sz就不同,所以不会重复

然后考虑每个自然数拆分的方案数:

$f^k$

但是每个自然数拆分,会被计算:$\frac{k!}{\Pi cnt[i]}$次,再除掉

所以,实际上,贡献就是:$\frac{n!*\Pi contribution}{k!*\Pi i!}$

就是$\frac{f^k}{k!}$的第n项再乘上$n!$

然后就可以用麦克劳林展开,推出e^f的式子了

思路二:

考虑dp

f[i],i个点的ans

无向图很好算.2^(C(n,2))

考虑在所有无向图中减去不连通的

不连通意味着某个点不能到达所有其他点

不妨从1来观察

枚举和1的联通块大小j

设g(n,j),表示n个点,和1联通块大小为j的无向连通图个数

g(n,j)=C(n-1,j-1)*2^(C(n-j,2))*f[j]

f[n]=2^(C(n,2)-∑g(n,j) (1<=j<=n-1)

把g和f的关系带进去

然后移项过去,发现可以把j范围变成(1<=j<=n)就消掉了f[n]项

组合数展开,可以NTT

然后再转化成逆元

注意,这个逆元是在mod x^(n+1)下的

最后乘出来的长度是2*n的

注意长度

#include<bits/stdc++.h>
#define il inline
#define reg register int
#define int long long
#define numb (ch^'0')
using namespace std;
typedef long long ll;
il void rd(int &x){
char ch;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
namespace Miracle{
const int N=*+;
const int mod=;
const int G=;
ll GI;
int n;
ll jie[N],ivv[N];
ll f[N],ni[N],p[N],g[N],t[N],d[N],e[N];
int rev[N];
int qm(int x,int y){
int ret=;
while(y){
if(y&) ret=(ll)ret*x%mod;
x=(ll)x*x%mod;
y>>=;
}
return ret;
}
int mo(int x){
return x>=mod?x-mod:x;
}
void pre(int n){
for(reg i=;i<n;++i){
rev[i]=rev[i>>]>>|((i&)?n>>:);
}
}
void NTT(int *f,int n,int c){
for(reg i=;i<n;++i){
if(i>rev[i]){
f[i]^=f[rev[i]]^=f[i]^=f[rev[i]];
}
}
for(reg p=;p<=n;p<<=){
int gen;
if(c==) gen=qm(G,(mod-)/p);
else gen=qm(GI,(mod-)/p);
for(reg l=;l<n;l+=p){
int buf=;
for(reg k=l;k<l+p/;++k){
int tmp=(ll)buf*f[k+p/]%mod;
f[k+p/]=mo(f[k]-tmp+mod);
f[k]=mo(f[k]+tmp);
buf=(ll)buf*gen%mod;
}
}
}
}
void calc(int *f,int *g,int n){
for(reg i=;i<n;++i){
rev[i]=rev[i>>]>>|((i&)?n>>:);
}
NTT(f,n,);NTT(g,n,);
for(reg i=;i<n;++i) f[i]=(ll)f[i]*g[i]%mod;
NTT(f,n,-);
ll iv=qm(n,mod-);
for(reg i=;i<n;++i) f[i]=(ll)f[i]*iv%mod;
}
void inv(int *f,int *g,int n){//mod n
if(n==){
g[]=qm(f[],mod-);return;
}
inv(f,g,n>>);
for(reg i=;i<n/;++i) d[i]=g[i],e[i]=f[i];
for(reg i=n/;i<=n;++i) d[i]=,e[i]=f[i];
for(reg i=n+;i<=*n;++i) d[i]=,e[i]=; for(reg i=;i<*n;++i){
rev[i]=rev[i>>]>>|((i&)?(*n)>>:);
}
NTT(d,*n,);NTT(e,*n,);
for(reg i=;i<*n;++i){
g[i]=mo(mo(*d[i])-(ll)e[i]*d[i]%mod*d[i]%mod+mod);
}
NTT(g,*n,-);
ll iv=qm(*n,mod-);
for(reg i=;i<*n;++i){
if(i<n) g[i]=(ll)g[i]*iv%mod;
else g[i]=;
}
}
int main(){
rd(n);
GI=qm(G,mod-);
int len,lp;
for(lp=n,len=;len<=lp;len<<=);
jie[]=;
for(reg i=;i<len;++i){
jie[i]=jie[i-]*i%mod;
}
ivv[len-]=qm(jie[len-],mod-);
for(reg i=len-;i>=;--i){
ivv[i]=ivv[i+]*(i+)%mod;
}
for(reg i=;i<len;++i){
g[i]=qm(,(ll)(i-)*i/)*ivv[i]%mod;
if(i)t[i]=qm(,(ll)(i-)*i/)*ivv[i-]%mod;
else t[i]=;
}
// cout<<" gg "<<endl;
// for(reg i=0;i<=n;++i){
// cout<<g[i]<<" ";
// }
// cout<<" tt "<<endl;
// for(reg i=0;i<=n;++i){
// cout<<t[i]<<" ";
// }cout<<endl;
inv(g,ni,len);
// //for(reg i=n+1;i<=)
// cout<<" ni "<<endl;
// for(reg i=0;i<=10;++i){
// cout<<ni[i]<<" ";
// }cout<<endl; len*=;
pre(len);
NTT(ni,len,);NTT(t,len,);
for(reg i=;i<len;++i){
f[i]=ni[i]*t[i]%mod;
}
NTT(f,len,-);
ll iv=qm(len,mod-);
for(reg i=;i<len;++i) f[i]=f[i]*iv%mod;
printf("%lld",f[n]*jie[n-]%mod);
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
Date: 2019/2/3 21:43:20
*/

luoguP4841 城市规划的更多相关文章

  1. COGS 2353 2355 2356 2358 有标号的DAG计数

    不用连通 枚举入度为0的一层 卷积 发现有式子: 由$n^2-i^2-(n-i)^2=2*i*(n-i)$ 可得$2^{i*(n-i)}=\frac{{\sqrt 2}^{(n^2)}}{{\sqrt ...

  2. [WC2019] 数树

    [WC2019] 数树 Zhang_RQ题解(本篇仅概述) 前言 有进步,只做了半天.... 一道具有极强综合性的数数好题! 强大的多合一题目 精确地数学推导和耐心. 有套路又不失心意. 融合了: 算 ...

  3. [题解] LuoguP4841 [集训队作业2013]城市规划

    Description 求\(n\)个点无重边.无自环.带标号的无向联通图个数,对\(1004535809\)(\(479 \times 2^{21} + 1\))取模.\(n \le 130000\ ...

  4. 浅谈城市规划在移动GIS方面的应用发展

    1.概述 城市建设进程加快,城市规划管理工作日趋繁重,各种来源的数据产生各种层出不穷的问题,严重影响城市规划时的准确性,为此全面合理的掌握好各方面的城市规划资料才能做出更加科学的决策.移动端的兴起为规 ...

  5. 【BZOJ-1952】城市规划 [坑题] 仙人掌DP + 最大点权独立集(改)

    1952: [Sdoi2010]城市规划 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 73  Solved: 23[Submit][Status][ ...

  6. BZOJ 3456: 城市规划 [多项式求逆元 组合数学 | 生成函数 多项式求ln]

    3456: 城市规划 题意:n个点组成的无向连通图个数 以前做过,今天复习一下 令\(f[n]\)为n个点的无向连通图个数 n个点的完全图个数为\(2^{\binom{n}{2}}\) 和Bell数的 ...

  7. 【BZOJ3456】城市规划(生成函数,多项式运算)

    [BZOJ3456]城市规划(生成函数,多项式运算) 题面 求\(n\)个点的无向连通图个数. \(n<=130000\) 题解 \(n\)个点的无向图的个数\(g(n)=2^{C_n^2}\) ...

  8. 洛谷 P4841 城市规划 解题报告

    P4841 城市规划 题意 n个有标号点的简单(无重边无自环)无向连通图数目. 输入输出格式 输入格式: 仅一行一个整数\(n(\le 130000)\) 输出格式: 仅一行一个整数, 为方案数 \( ...

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

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

随机推荐

  1. wap2app(五)-- 微信授权登录以及踩过的坑

    应用场景是:用Hbuilder打包app,在app中点击微信授权登录或者某一操作,调起微信授权登录,用户授权后拿到用户信息. 一.登录插件配置 先配置微信登录参数 appid和appsecret,在m ...

  2. Docker 创建 Confluence6.12.2 中文版

    目录 目录 1.介绍 1.1.什么是Confluence? 2.Confluence的官网在哪里? 3.如何下载安装? 4.对 Confluence 进行配置 4.1.设置 Confluence 4. ...

  3. SQL SERVER 执行动态SQL EXEC

    :普通SQL语句可以用Exec执行 eg: Select * from tableName Exec('select * from tableName') Exec sp_executesql N's ...

  4. 关于SQL数据库 msdb.dbo.sp_send_dbmail 函数发送邮件的几个实例

    在推行系统中,时不时会有用户提出希望系统能自动推送邮件,由于手头的工具和能力有限,不少需求都借助于sql server的邮件触发来实现. 步骤: 1.配置邮箱.步骤略,网上有不少帖子说明,手工直接在管 ...

  5. 网络编程 单纯UDP通信

    网络编程 单纯UDP通信 1,UDP发送端 2,UDP接收端 UDP发送端: #include <stdio.h> #include <unistd.h> #include & ...

  6. mysql 的远程链接字符

    默认情况下,mysql只允许本地登录,如果要开启远程连接,则需要修改/etc/mysql/my.conf文件. 一.修改/etc/mysql/my.conf找到bind-address = 127.0 ...

  7. easyUI行删除

    function removeRow(target,number) { if (number) { var index = getRowIndex(target); $datagrid.datagri ...

  8. InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Identity.UserManager`1[Microsoft.AspNetCore.Identity.IdentityUser]'

    在新建asp.net core 应用后, 添加了自定义的ApplicationDbContext 和ApplicationUser ,并添加了Identity认证后, 会出现 InvalidOpera ...

  9. [LeetCode] 16. 最接近的三数之和

    题目链接:https://leetcode-cn.com/problems/3sum-closest/ 题目描述: 给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 num ...

  10. SkylineGlobe7.0.1版本 支持SQLite(*.sqlite;*.db)数据库

    SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了 ...