【LG4841】城市规划

题面

洛谷

题解

记\(t_i\)表示\(i\)个点的无向图个数,显然\(t_i=2^{C_i^2}\)。

设\(f_i\)表示\(i\)个点的无向连通图个数,容斥一下,枚举\(1\)号点所在连通块的大小,再让剩下的点随便构成联通图,

则有:

\[f_i=t_i-\sum_{j=1}^{i-1}f_j*C_{i-1}^{j-1}*t_{i-j}
\]

展开组合数:

\[f_i=t_i-\sum_{j=1}^{i-1}f_j*t_{i-j}*\frac {(i-1)!}{(i-j)!(j-1)!}\\
\Leftrightarrow \frac {f_i}{(i-1)!}=\frac {t_i}{(i-1)!}-\sum_{j=1}^{i-1}\frac {f_j}{(j-1)!}*\frac {t_{i-j}}{(i-j)!}
\]

设\(g_i=\frac {f_i}{(i-1)!},h_i=\frac {t_i}{i!}\),那么

\[g_i=i*h_i-\sum_{j=1}^{i-1}g_i*h_i
\]

分治+\(NTT\)即可。

代码

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int Mod = 1004535809;
int fpow(int x, int y) {
int res = 1;
while (y) {
if (y & 1) res = 1ll * res * x % Mod;
x = 1ll * x * x % Mod;
y >>= 1;
}
return res;
}
const int G = 3, iG = fpow(G, Mod - 2);
const int MAX_N = 4e5 + 5; int Limit, rev[MAX_N];
void NTT(int *p, int op) {
for (int i = 0; i < Limit; i++) if (i < rev[i]) swap(p[i], p[rev[i]]);
for (int i = 1; i < Limit; i <<= 1) {
int rot = fpow(op == 1 ? G : iG, (Mod - 1) / (i << 1));
for (int j = 0; j < Limit; j += (i << 1)) {
int w = 1;
for (int k = 0; k < i; k++, w = 1ll * w * rot % Mod) {
int x = p[j + k], y = 1ll * w * p[i + j + k] % Mod;
p[j + k] = (x + y) % Mod, p[i + j + k] = (x - y + Mod) % Mod;
}
}
}
if (op == -1) {
int inv = fpow(Limit, Mod - 2);
for (int i = 0; i < Limit; i++) p[i] = 1ll * p[i] * inv % Mod;
}
} int g[MAX_N], h[MAX_N];
void Div(int l, int r) {
if (l == r) return ;
static int A[MAX_N], B[MAX_N], C[MAX_N];
int mid = (l + r) >> 1;
Div(l, mid);
int p = 0;
for (Limit = 1; Limit <= (r - l) * 2; Limit <<= 1, ++p) ;
for (int i = 0; i < Limit; i++) rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << (p - 1));
for (int i = 0; i <= mid - l; i++) A[i] = g[i + l];
for (int i = 0; i < r - l; i++) B[i] = h[i + 1];
for (int i = mid - l + 1; i < Limit; i++) A[i] = 0;
for (int i = r - l; i < Limit; i++) B[i] = 0;
NTT(A, 1); NTT(B, 1);
for (int i = 0; i < Limit; i++) C[i] = 1ll * A[i] * B[i] % Mod;
NTT(C, -1);
for (int i = mid + 1; i <= r; i++) g[i] = (g[i] - C[i - 1 - l] + Mod) % Mod;
Div(mid + 1, r);
}
int N, fac[MAX_N], ifc[MAX_N];
int C(int n, int m) {
if (m > n) return 0;
else return 1ll * fac[n] * ifc[m] % Mod * ifc[n - m] % Mod;
}
int main () {
#ifndef ONLINE_JUDGE
freopen("cpp.in", "r", stdin);
#endif
cin >> N;
fac[0] = 1; for (int i = 1; i <= N; i++) fac[i] = 1ll * fac[i - 1] * i % Mod;
ifc[N] = fpow(fac[N], Mod - 2); for (int i = N - 1; ~i; i--) ifc[i] = 1ll * ifc[i + 1] * (i + 1) % Mod;
for (int i = 1; i <= N; i++) h[i] = 1ll * fpow(2, 1ll * i * (i - 1) / 2 % (Mod - 1)) * ifc[i] % Mod;
for (int i = 1; i <= N; i++) g[i] = 1ll * ifc[i - 1] * fpow(2, 1ll * i * (i - 1) / 2 % (Mod - 1)) % Mod;
Div(1, N);
printf("%d\n", (int)(1ll * g[N] * fac[N - 1] % Mod));
return 0;
}

【LG4841】城市规划的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

  7. 【BZOJ 3456】 3456: 城市规划 (NTT+多项式求逆)

    3456: 城市规划 Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 658  Solved: 364 Description 刚刚解决完电力网络的问题 ...

  8. [BZOJ3456]城市规划(生成函数+多项式求逆+多项式求ln)

    城市规划 时间限制:40s      空间限制:256MB 题目描述 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了.  刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一 ...

  9. bzoj 3456 城市规划 多项式求逆+分治FFT

    城市规划 Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 1091  Solved: 629[Submit][Status][Discuss] Desc ...

随机推荐

  1. collecitons.deque

    python队列,可以使用collections里面的deque,将列表当作队列使用. deque方法有: from collections import deque deque.append() d ...

  2. C/C++——存储

    关于各内存空间: 栈(stack):变量,数组.栈的大小是2M(也有的是1M),反正不大,一般递归写错了,没有出口,都会报错stack overflow. 全局区(静态区):全局变量.数组,静态变量. ...

  3. php memcache分布式和要注意的问题

    Memcache的分布式介绍 memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能.服务器端仅包括内存存储功能,其实现非常简单.至于memcached的分布式,则是完全由客户 ...

  4. No.3 - CSS transition 和 CSS transform 配合制作动画

    课程概述 作业提交截止时间:09-01 任务目的 深度理解掌握 transition-timing-function 以及它的意义 学会配合使用 CSS transform 和CSS transiti ...

  5. Dubbo实践(十五)消费者引用服务

    Refer取得invoker的过程 <!-- 指定了哪种的注册中心,是基于zookeeper协议的,指定了注册中心的地址以及端口号 --> <dubbo:registry proto ...

  6. 优化Eclipse基本配置

    eclipse有很多默认配置会造成其本身运行缓慢,特别是加载大型工程的时候,以下列举的几种方法可以优化eclipse的运行速度,加快工程的加载和构建. 关闭XML Validation 1. 关闭当前 ...

  7. 如何导出SHP文件中的点坐标?(ArcGIS10)

    行政区域坐标,网上流传较广的版本是包括海域的,假如你仅仅想要把陆地边界绘出,那么怎么办呢? 现在讲一下用arcgis 10从shp线.面文件中获取对应区域的坐标呢?(点图层忽略第一步) 首先用在arc ...

  8. Oracle 实例管理

    理解初始化参数文件实例由内存中构建它的参数来定义.许多参数(但不是全部)可以在启动后更改.有些参数在启动时就固定了,只能在关闭实例并再次启动时更改. 静态和动态参数文件参数文件由两类:静态参数文件(也 ...

  9. transfrom、transition、animation区别

    transfrom transform是静态属性,非动画属性,和margin-left.margin-top类似. translate:平移,类似position:relative;translate ...

  10. 在Windows下编译mongo-c-driver 1.3.x

    在Windows下编译mongo-c-driver 1.3.x 在Windows下编译mongo-c-driver 1.3.x 1.安装 MSYS2https://sourceforge.net/pr ...