[XSY 1538] 连在一起的幻想乡

题意

  给定 $n$ , 求所有 $n$ 个点的简单连通图的边数的平方的和.

  $n \le 2000$ .

分析

  $(x + y) ^ 2 = x ^ 2 + 2xy + y ^ 2$ .

  我们合并的时候, 要对所有的 $x$ 和 $y$ 进行求和.

  $\sum [(x + y) ^ 2] = \sum (x ^ 2) \sum (y ^ 0) + 2 \sum x \sum y + \sum (x ^ 0) \sum (y ^ 2)$ .

  设 $h_0[n]$ 为 $n$ 个点的简单图的个数.

  $h_0[n] = 2 ^ {\frac{n(n-1)}{2}}$ .

  设 $h_1[n]$ 为 $n$ 个点的简单图的边数的和.

  $h_1[n] = \frac{n(n-1)}{2} 2 ^ {\frac{n(n-1)}{2} - 1}$ .

  设 $h_2[n]$ 为 $n$ 个点的简单图的边数的平方的和.

  我们考虑枚举与 $1$ 号点相连的边的数量.

  $h_2[n] = \sum_{i = 0} ^ {n-1} \binom{n-1}{i} (i \times i \times h_0[n-1] + 2 \times i \times h_1[n-1] + h_2[n-1])$ .

  设 $f_0[n]$ 为 $n$ 个点的简单连通图的个数.

  我们考虑用总的连通图的个数, 减掉不合法的, 不合法的按照与 $1$ 号点所在的连通块个数进行分类.

  $f_0[n] = h_0[n] - \sum_{i = 1} ^ {n-1} \binom{n-1}{i-1} f_0[i] \times h_0[n-i]$ .

  设 $f_1[n]$ 为 $n$ 个点的简单连通图的边数的和.

  $f_1[n] = h_1[n] - \sum_{i = 1} ^ {n-1} \binom{n-1}{i-1} (f_0[i] \times h_1[n-i] + f_1[i] \times h_0[n-i])$ .

 

  设 $f_2[n]$ 为 $n$ 个点的简单连通图的边数的平方的和.

  $f_2[n] = h_2[n] - \sum_{i = 1} ^ {n-1} \binom{n-1}{i-1} (f_2[i] \times h_0[n-i] + 2 \times f_1[i] \times h_1[n-i] + f_0[i] \times h_2[n-i])$ .

实现

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cstdlib>
 4 #include <cctype>
 5 #define F(i, a, b) for (register int i = (a); i <= (b); i++)
 6 inline int rd(void) {
 7     int f = 1; char c = getchar(); for (; !isdigit(c); c = getchar()) if (c == ‘-‘) f = -1;
 8     int x = 0; for (; isdigit(c); c = getchar()) x = x*10+c-‘0‘; return x*f;
 9 }
10
11 const int N = 1005;
12
13 int s, MOD;
14 int c[N][N], h0[N], h1[N], h2[N], f0[N], f1[N], f2[N];
15
16 inline int pwr(int j) {
17     int mul = 1; for (int i = 2; j > 0; j >>= 1, i = 1LL * i * i % MOD) if (j & 1) mul = 1LL * mul * i % MOD; return mul;
18 }
19
20 int main(void) {
21     #ifndef ONLINE_JUDGE
22         freopen("xsy1538.in", "r", stdin);
23     #endif
24
25     scanf("%d %d", &s, &MOD);
26
27     F(i, 0, s) {
28         c[i][0] = 1;
29         F(j, 1, i)
30             c[i][j] = (c[i-1][j] + c[i-1][j-1]) % MOD;
31     }
32
33     F(n, 0, s)
34         h0[n] = pwr(n * (n-1) / 2);
35
36     F(n, 0, s)
37         h1[n] = 1LL * n * (n-1) / 2 * pwr(n * (n-1) / 2 - 1) % MOD;
38
39     F(n, 0, s)
40         F(i, 0, n-1) {
41             int t = (1LL * i * i * h0[n-1] + 2LL * i * h1[n-1] + h2[n-1]) % MOD;
42             h2[n] = (h2[n] + 1LL * c[n-1][i] * t) % MOD;
43         }
44
45     F(n, 0, s) {
46         f0[n] = h0[n];
47         F(i, 1, n-1) {
48             int t = 1LL * f0[i] * h0[n-i] % MOD;
49             f0[n] = (f0[n] - 1LL * c[n-1][i-1] * t) % MOD;
50         }
51     }
52
53     F(n, 0, s) {
54         f1[n] = h1[n];
55         F(i, 1, n-1) {
56             int t = (1LL * f1[i] * h0[n-i] + 1LL * f0[i] * h1[n-i]) % MOD;
57             f1[n] = (f1[n] - 1LL * c[n-1][i-1] * t) % MOD;
58         }
59     }
60
61     F(n, 0, s) {
62         f2[n] = h2[n];
63         F(i, 1, n-1) {
64             int t = (1LL * f2[i] * h0[n-i] + 2LL * f1[i] * h1[n-i] + 1LL * f0[i] * h2[n-i]) % MOD;
65             f2[n] = (f2[n] - 1LL * c[n-1][i-1] * t) % MOD;
66         }
67     }
68     printf("%d\n", (f2[s] + MOD) % MOD);
69
70     return 0;
71 }
时间: 2024-10-23 18:31:07

[XSY 1538] 连在一起的幻想乡的相关文章

红色的幻想乡

题目背景 蕾米莉亚的红雾异变失败后,很不甘心. 题目描述 经过上次失败后,蕾米莉亚决定再次发动红雾异变,但为了防止被灵梦退治,她决定将红雾以奇怪的阵势释放. 我们将幻想乡看做是一个n*m的方格地区,一开始没有任何一个地区被红雾遮盖.蕾米莉亚每次站在某一个地区上,向东南西北四个方向各发出一条无限长的红雾,可以影响到整行/整列,但不会影响到她所站的那个地区.如果两阵红雾碰撞,则会因为密度过大而沉降消失.灵梦察觉到了这次异变,决定去解决它.但在解决之前,灵梦想要了解一片范围红雾的密度.可以简述为两种操

[Zjoi2015]诸神眷顾的幻想乡

[Zjoi2015]诸神眷顾的幻想乡 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1537  Solved: 892 Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给幽香看.幽香当然也非常高兴啦. 这时幽香发现了一件非常有趣的事情,太阳花田有n块空地.在过去,幽香为了方便,在这n块空地之间修建了n-1条

[luogu P3801] 红色的幻想乡 [线段树][树状数组]

题目背景 蕾米莉亚的红雾异变失败后,很不甘心. 题目描述 经过上次失败后,蕾米莉亚决定再次发动红雾异变,但为了防止被灵梦退治,她决定将红雾以奇怪的阵势释放. 我们将幻想乡看做是一个n*m的方格地区,一开始没有任何一个地区被红雾遮盖.蕾米莉亚每次站在某一个地区上,向东南西北四个方向各发出一条无限长的红雾,可以影响到整行/整列,但不会影响到她所站的那个地区.如果两阵红雾碰撞,则会因为密度过大而沉降消失.灵梦察觉到了这次异变,决定去解决它.但在解决之前,灵梦想要了解一片范围红雾的密度.可以简述为两种操

【BZOJ3926】[Zjoi2015]诸神眷顾的幻想乡 广义后缀自动机

[BZOJ3926][Zjoi2015]诸神眷顾的幻想乡 Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给幽香看.幽香当然也非常高兴啦. 这时幽香发现了一件非常有趣的事情,太阳花田有n块空地.在过去,幽香为了方便,在这n块空地之间修建了n-1条边将它们连通起来.也就是说,这n块空地形成了一个树的结构. 有n个粉丝们来到了太阳花田上.为了表达对幽香生日的祝

BZOJ 4596: [Shoi2016]黑暗前的幻想乡

4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 408  Solved: 232[Submit][Status][Discuss] Description 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖 怪涌入了幻想乡,扰乱了幻想乡昔日的秩序.但是幻想乡的建制派妖怪(人类) 博丽灵梦和八云紫等人整日高谈所有妖怪平等,幻想乡多元化等等,对于幻想乡 目前面临的种种大问题却给不出合适的解

BZOJ 3926: [Zjoi20150]诸神眷顾的幻想乡

3926: [Zjoi20150]诸神眷顾的幻想乡 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 438  Solved: 273 Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给幽香看.幽香当然也非常高兴啦. 这时幽香发现了一件非常有趣的事情,太阳花田有n块空地.在过去,幽香为了方便,在这n块空地之间修

字符串(广义后缀自动机):BZOJ 3926 [Zjoi2015]诸神眷顾的幻想乡

3926: [Zjoi2015]诸神眷顾的幻想乡 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 843  Solved: 510[Submit][Status][Discuss] Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给幽香看.幽香当然也非常高兴啦. 这时幽香发现了一件非常有趣的事情,太阳花田有n

bzoj3925: [Zjoi2015]地震后的幻想乡

Description 傲娇少女幽香是一个很萌很萌的妹子,而且她非常非常地有爱心,很喜欢为幻想乡的人们做一些自己力所能及的事情来帮助他们. 这不,幻想乡突然发生了地震,所有的道路都崩塌了.现在的首要任务是尽快让幻想乡的交通体系重新建立起来.幻想乡一共有n个地方,那么最快的方法当然是修复n-1条道路将这n个地方都连接起来. 幻想乡这n个地方本来是连通的,一共有m条边.现在这m条边由于地震的关系,全部都毁坏掉了.每条边都有一个修复它需要花费的时间,第i条边所需要的时间为ei.地震发生以后,由于幽香是

bzoj 3926 [Zjoi20150]诸神眷顾的幻想乡(SAM)

3926: [Zjoi20150]诸神眷顾的幻想乡 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 615  Solved: 369[Submit][Status][Discuss] Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给幽香看.幽香当然也非常高兴啦. 这时幽香发现了一件非常有趣的事情,太阳花田有