bzoj 5305 [Haoi2018] 苹果树

传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=5305

【题解】

 1 # include <bits/stdc++.h>
 2 using namespace std;
 3
 4 const int M = 2010;
 5
 6 int n, mod;
 7 int C[M][M], fac[M];
 8
 9 int main() {
10     cin >> n >> mod;
11     fac[0] = 1;
12     for (int i=1; i<=n; ++i) fac[i] = 1ll * fac[i-1] * i % mod;
13     C[0][0] = 1;
14     for (int i=1; i<=n; ++i) {
15         C[i][0] = 1;
16         for (int j=1; j<=i; ++j) {
17             C[i][j] = C[i-1][j] + C[i-1][j-1];
18             if(C[i][j] >= mod) C[i][j] -= mod;
19         }
20     }
21     int ans = 0;
22     for (int i=2; i<=n; ++i)
23         for (int sz=1; sz<=n-i+1; ++sz) {
24             int tot = 1ll * fac[n-sz-1] * i % mod * (i-1) % mod * fac[sz] % mod * C[n-i][sz-1] % mod;
25             ans += 1ll * tot * sz % mod * (n-sz) % mod;
26             if(ans >= mod) ans -= mod;
27         }
28
29     cout << ans % mod << endl;
30     return 0;
31 }

原文地址:https://www.cnblogs.com/galaxies/p/bzoj5305.html

时间: 2024-11-11 06:58:11

bzoj 5305 [Haoi2018] 苹果树的相关文章

bzoj 5306 [HAOI2018] 染色

bzoj 5306 [HAOI2018] 染色 链接 推式子题 首先枚举有几种颜色选择恰好 \(s\) 次,可以得到一个式子: \[\sum _{i = 0} ^ {\min(\frac n s,m )} \frac {\binom n {i \cdot s} \binom m i (i \cdot s) ! \cdot f_i \cdot (m-i)^{n - is}} {(s!) ^ i} \] 但是,\(f_i\) 不能单纯地等于 \(w_i\), 因为会重复计算,我们不能保证当前选择的

[HAOI2018]苹果树

题目描述 小 C 在自己家的花园里种了一棵苹果树, 树上每个结点都有恰好两个分支. 经过细心的观察, 小 C 发现每一天这棵树都会生长出一个新的结点. 第一天的时候, 果树会长出一个根结点, 以后每一天, 果树会随机选择一个当前树中没有长出过结点 的分支, 然后在这个分支上长出一个新结点, 新结点与分支所属的结点之间连接上一条边. 小 C 定义一棵果树的不便度为树上两两结点之间的距离之和, 两个结点之间 的距离定义为从一个点走到另一个点的路径经过的边数. 现在他非常好奇, 如果 NNN 天之后小

【BZOJ 3735】苹果树 树上莫队(树分块+离线莫队+鬼畜的压行)

学习了树上莫队,树分块后对讯问的$dfs序$排序,然后就可以滑动树链处理答案了. 关于树链的滑动,只需要特殊处理一下$LCA$就行了. 在这里一条树链保留下来给后面的链来转移的$now$的为这条树链上所有点除去$LCA$的颜色种数.因为如果要考虑$LCA$情况就太多了,不如单独考虑$LCA$. 转移后加上当前链的$LCA$进行统计,然后再去掉这个$LCA$更新一下$now$值给后面的链转移. 这都是我的理解,说的有点不清楚,具体请看vfk的题解 OTZ 虽然不是这道题,但是通过这篇博客学习树上莫

【BZOJ】3757 苹果树

题意:n个节点的树,每个点有一种颜色.现有m种询问,每次询问x y a b表示x到y的路径上颜色的种数且a颜色看成b颜色.(n<=50000, m<=100000) #include <bits/stdc++.h> using namespace std; const int N=50005; int ihead[N], cnt, id[N], blo[N], f[N][16], dep[N], cal[N], col[N], st[N], n, m, Ans[N], ans, I

bzoj 5302: [Haoi2018]奇怪的背包

Description Solution 首先 \(v_1,v_2,v_3...v_n,P\) 能够构成的最小数是 \(gcd(P,v_1,v_2,v_3...v_n)\) 然后 \(gcd(P,v_1,v_2,v_3...v_n)|w_i\) 则可以构成 \(w_i\) 所以我们直接背包一下就可以了,设 \(m\) 为 \(P\) 的约数个数,\(m\) 最多是 \(n^{\frac{1}{3}}\) 那么复杂度就是 \(O(n*m*logP)\) 容易发现如果 \(gcd(v_i,P)=gc

Luogu 4492 [HAOI2018]苹果树 组合数

https://www.luogu.org/problemnew/show/P4492 找每个编号的点的父边的贡献,组合数和阶乘就能算了. 我考场上怎么就是没想到呢. 调了好久好久好久好久调不出来,样例一直过不了,刚刚发现是溢出了,我是个zz. 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cmath> 5 #include<iostream> 6

HAOI2018苹果树

题解 首先所有生成树的情况树是\(n!\)的,因为第一次有1中方法,第二次有两种放法,以此类推... 然后我们发现距离这种东西可以直接枚举每条边算贡献. 于是我们枚举了一个点\(i\),又枚举了这个点的子树大小\(size\),那么这部分的距离也就可以直接算出来了. \[ (n-size)*size \] 接下来我们还要去算有多少种方案. 对于子树内部,标号和排列方法都没有确定,所以方案数就是: \[ \binom{n-i}{size}*size! \] 然后考虑子树外的情况,首先子树外的点不可

【BZOJ】3052: [wc2013]糖果公园

http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]},可以单点修改颜色.(n, m, q<=100000) #include <bits/stdc++.h> using namespace std; const int N=100005, M=100005; typedef long long ll; inline int getint()

bzoj 3757: 苹果树(树上莫队)

3757: 苹果树 Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 1327  Solved: 510 [Submit][Status][Discuss] Description 神犇家门口种了一棵苹果树.苹果树作为一棵树,当然是呈树状结构,每根树枝连接两个苹果,每个苹果都可以沿着一条由树枝构成的路径连到树根,而且这样的路径只存在一条.由于这棵苹果树是神犇种的,所以苹果都发生了变异,变成了各种各样的颜色.我们用一个1到n之间的正整数来表示一种颜色