3456: 城市规划

Time Limit: 40 Sec  Memory Limit: 256 MB
Submit: 658  Solved: 364

Description

刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了.
 刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使得整个国家的任意两个城市都直接或间接的连通. 为了省钱, 每两个城市之间最多只能有一条直接的贸易路径. 对于两个建立路线的方案, 如果存在一个城市对, 在两个方案中是否建立路线不一样, 那么这两个方案就是不同的, 否则就是相同的. 现在你需要求出一共有多少不同的方案.
 好了, 这就是困扰阿狸的问题. 换句话说, 你需要求出n个点的简单(无重边无自环)无向连通图数目.
 由于这个数字可能非常大, 你只需要输出方案数mod 1004535809(479 * 2 ^ 21 + 1)即可.

Input

仅一行一个整数n(<=130000)

Output

仅一行一个整数, 为方案数 mod 1004535809.

Sample Input

3

Sample Output

4

HINT

对于 100%的数据, n <= 130000

Source

 
 
 
【分析】
  又是看题解和抄代码的好季节。。。
  呵呵呵
  【关于多项式求逆看这里
  

  

  转自:http://blog.miskcoo.com/2015/05/bzoj-3456

 #include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define Mod 1004535809
#define LL long long
#define Maxn 130000*4
const int G=; int fac[Maxn],F[Maxn],H[Maxn],V[Maxn]; int qpow(int x,int b)
{
int ans=;
while(b)
{
if(b&) ans=1LL*ans*x%Mod;
x=1LL*x*x%Mod;
b>>=;
}
return ans;
} int R[Maxn];
void NTT(int *a,int nn,int t)
{
for(int i=,j=;i<nn;i++)
{
if(i>j) swap(a[i],a[j]);
for(int l=(nn>>);(j^=l)<l;l>>=);
}
for(int i=;i<nn;i<<=)
{
int wn=qpow(G,(Mod-)/(i<<));
for(int j=;j<nn;j+=(i<<))
{
int w=;
for(int k=;k<i;k++)
{
int x=a[j+k],y=1LL*w*a[j+k+i]%Mod;
a[j+k]=(x+y)%Mod;a[j+k+i]=((x-y)%Mod+Mod)%Mod;
w=1LL*w*wn%Mod;
}
}
}
if(t==-)
{
int inv=qpow(nn,Mod-);
reverse(a+,a+nn);
for(int i=;i<=nn;i++) a[i]=1LL*a[i]*inv%Mod;
}
} // int temp[Maxn];
void get_inv(int *a,int *b,int len)
{
static int temp[Maxn];
if(len==)
{
b[]=qpow(a[],Mod-);
b[]=;
return;
}
get_inv(a,b,len>>);
for(int i=;i<=len;i++) temp[i]=a[i];
for(int i=len+;i<=len<<;i++) temp[i]=;
// memcpy(temp,a,sizeof(int)*len);
// memset(temp+len,0,sizeof(int)*len);
NTT(temp,len<<,),NTT(b,len<<,);
for(int i=;i<(len<<);i++) b[i]=1LL*b[i]*(-1LL*temp[i]*b[i]%Mod+Mod)%Mod;
NTT(b,len<<,-);
memset(b+len,,sizeof(int)*len);
} int n,m;
void fal()
{
for(int i=;i<=m;i++) H[i-]=1LL*F[i]*i%Mod;
get_inv(F,V,m);
NTT(H,m,);NTT(V,m,);
for(int i=;i<=m;i++) F[i]=1LL*H[i]*V[i]%Mod;
NTT(F,m,-);
for(int i=n;i>=;i--) F[i]=1LL*F[i-]*qpow(i,Mod-)%Mod;
} int main()
{
scanf("%d",&n);
m=;while(m<=*n) m<<=;
fac[]=;for(int i=;i<=n;i++) fac[i]=1LL*fac[i-]*i%Mod;
F[]=;
for(int i=;i<=n;i++)
{
F[i]=1LL*qpow(,1LL*i*(i-)/%(Mod-))*qpow(fac[i],Mod-)%Mod;
}
fal();
F[n]=1LL*F[n]*fac[n]%Mod;
printf("%d\n",F[n]);
return ;
}

尝试了好多遍,发现不用static 似乎是不行的?

2017-04-15 11:54:42

【BZOJ 3456】 3456: 城市规划 (NTT+多项式求逆)的更多相关文章

  1. BZOJ 3456 城市规划 ( NTT + 多项式求逆 )

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3456 题意: 求出\(n\)个点的简单(无重边无自环)无向连通图的个数.(\(n< ...

  2. 【bzoj3456】城市规划 容斥原理+NTT+多项式求逆

    题目描述 求出n个点的简单(无重边无自环)无向连通图数目mod 1004535809(479 * 2 ^ 21 + 1). 输入 仅一行一个整数n(<=130000) 输出 仅一行一个整数, 为 ...

  3. BZOJ 3456: 城市规划 与 多项式求逆算法介绍(多项式求逆, dp)

    题面 求有 \(n\) 个点的无向有标号连通图个数 . \((1 \le n \le 1.3 * 10^5)\) 题解 首先考虑 dp ... 直接算可行的方案数 , 容易算重复 . 我们用总方案数减 ...

  4. 【BZOJ】3456: 城市规划 动态规划+多项式求逆

    [题意]求n个点的带标号无向连通图个数 mod 1004535809.n<=130000. [算法]动态规划+多项式求逆 [题解]设$g_n$表示n个点的无向图个数,那么显然 $$g_n=2^{ ...

  5. BZOJ 3456: 城市规划(dp+多项式求逆)

    传送门 解题思路 这道题就是求带标号的无向连通图个数,首先考虑\(O(n^2)\)的做法,设\(f_i\)表示有\(i\)个节点的无向连通图个数,那么考虑容斥,先把所有的无向图求出,即为\(2^{C( ...

  6. BZOJ 4555 [Tjoi2016&Heoi2016]求和 ——分治 NTT 多项式求逆

    不想多说了,看网上的题解吧,我大概说下思路. 首先考察Stirling的意义,然后求出递推式,变成卷积的形式. 然后发现贡献是一定的,我们可以分治+NTT. 也可以直接求逆(我不会啊啊啊啊啊) #in ...

  7. [BZOJ3456]城市规划:DP+NTT+多项式求逆

    写在前面的话 昨天听吕老板讲课,数数题感觉十分的神仙. 于是,ErkkiErkko这个小蒟蒻也要去学数数题了. 分析 Miskcoo orz 带标号无向连通图计数. \(f(x)\)表示\(x\)个点 ...

  8. BZOJ1042 HAOI2008硬币购物(任意模数NTT+多项式求逆+生成函数/容斥原理+动态规划)

    第一眼生成函数.四个等比数列形式的多项式相乘,可以化成四个分式.其中分母部分是固定的,可以多项式求逆预处理出来.而分子部分由于项数很少,询问时2^4算一下贡献就好了.这个思路比较直观.只是常数巨大,以 ...

  9. P4233-射命丸文的笔记【NTT,多项式求逆】

    正题 题目链接:https://www.luogu.com.cn/problem/P4233 题目大意 随机选择一条有哈密顿回路的\(n\)个点的竞赛图,求选出图的哈密顿回路的期望个数. 对于每个\( ...

随机推荐

  1. 【Nginx】修改响应头,根据不同请求IP重定向到不同IP

    背景: 使用CAS登录的过程中会涉及到三次重定向,如果在同一个局域网内,是没有任何问题的,但如果涉及到跨网访问,这个问题就比较蛋疼了. 解决思路: 通过Nginx对要访问的系统进行代理,根据请求IP来 ...

  2. Intersection(HDU5120 + 圆交面积)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5120 题目: 题意: 求两个圆环相交的面积. 思路: 两个大圆面积交-2×大圆与小圆面积交+两小圆面 ...

  3. 2017ACM暑期多校联合训练 - Team 2 1008 HDU 6052 To my boyfriend (数学 模拟)

    题目链接 Problem Description Dear Liao I never forget the moment I met with you. You carefully asked me: ...

  4. GCD HDU - 1695 莫比乌斯反演入门

    题目链接:https://cn.vjudge.net/problem/HDU-1695#author=541607120101 感觉讲的很好的一个博客:https://www.cnblogs.com/ ...

  5. 黑色的网站后台管理系统ui界面——后台

    链接:http://pan.baidu.com/s/1pLffwE3 密码:m4v6

  6. 【Tomcat】tomcat中server.xml配置详解

    Tomcat Server的结构图如下: 该文件描述了如何启动Tomcat Server <Server>    <Listener />    <GlobaNaming ...

  7. 阿里Java研发工程师实习面经,附面试技巧

    作者:如何进阿里 链接:https://www.nowcoder.com/discuss/72899?type=0&order=0&pos=17&page=1 来源:牛客网 前 ...

  8. SPOJ DQUERY D-query (在线主席树/ 离线树状数组)

    版权声明:本文为博主原创文章,未经博主允许不得转载. SPOJ DQUERY 题意: 给出一串数,询问[L,R]区间中有多少个不同的数 . 解法: 关键是查询到某个右端点时,使其左边出现过的数都记录在 ...

  9. JavaScript 去字符串空格

    JavaScript 去字符串空格 (利用正则) # str为要去除空格的字符串: # 去除所有空格: str = str.replace(/\s+/g,""); # 去除两头空格 ...

  10. 如何在Cent OS上安装和部署jdk与tomcat?

    Cent OS是一款Linux系统.在商业应用中,Linux操作系统在服务器市场有着广泛的运用,这源于Linux系统的几大优点: 1.跨平台的硬件支持 由于Linux 的内核大部分是用C 语言编写的, ...