这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
|
2020-2021:teams:mian:nowcoder_training:2020_multi-university_training_contest_7 [2020/08/03 23:14] gary |
2020-2021:teams:mian:nowcoder_training:2020_multi-university_training_contest_7 [2020/08/04 19:18] (当前版本) grapelemonade [B] |
||
|---|---|---|---|
| 行 53: | 行 53: | ||
| ===== B ===== | ===== B ===== | ||
| - | <code> | + | 尽量选最大的吧 具体没太证 |
| + | |||
| + | <code cpp> | ||
| void work(int n,int m){ | void work(int n,int m){ | ||
| while(n&&m){ | while(n&&m){ | ||
| 行 94: | 行 96: | ||
| 直接数论分块即可。 | 直接数论分块即可。 | ||
| ===== I ===== | ===== I ===== | ||
| + | |||
| + | dp如代码所示,主要写下g数组怎么求 | ||
| + | |||
| + | 对于n个节点的无根树求$\sum d_i^2$ | ||
| + | |||
| + | 可以枚举数字在prufer序列出现的次数i,从n-2个节点中选出i个的方案为$C_{n-2}^i$,这i个位置全填1,2...n都是可行的,剩余的n-i-2个位置用剩下的n-1个数随便填满即可,方案数为${(n-1)}^{n-2-i}$ | ||
| + | |||
| + | 故$\sum d_i^2=C_{n-2}^i \times n \times {(n-1)}^{n-2-i} \times {(i+1)}^2$ | ||
| + | |||
| + | |||
| + | <code cpp> | ||
| + | for(int n=2;n<N;n++){ //n 无根树 value | ||
| + | for(int i=0;i<=n-2;i++) | ||
| + | (g[n]+=C(n-2,i)*n%M*(i+1)%M*(i+1)%M*poww(n-1,n-2-i))%=M; | ||
| + | } | ||
| + | for(int n=2;n<N;n++){ //n 无根森林 方案 | ||
| + | for(int i=1;i<=n;i++){ | ||
| + | (f[n]+=C(n-1,i-1)*poww(i,i-2)%M*f[n-i]%M)%=M; | ||
| + | } | ||
| + | } | ||
| + | for(int n=2;n<N;n++){ //n 无根森林 value | ||
| + | for(int i=1;i<=n;i++){ | ||
| + | (A[n]+=C(n-1,i-1)*((A[n-i]*poww(i,i-2)%M+f[n-i]*g[i]%M)%M)%M)%=M; | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | |||
| ===== J ===== | ===== J ===== | ||
| 行 184: | 行 213: | ||
| * A题可以打表,写C之前应该把A的暴力先调出来的( | * A题可以打表,写C之前应该把A的暴力先调出来的( | ||
| * 对板子不太熟悉了,C调了好久,赛后过题( | * 对板子不太熟悉了,C调了好久,赛后过题( | ||
| + | |||
| + | Gary: | ||
| + | |||
| + | * I题逆元求错了 (真的zz) | ||
| + | * 需要好好维护一下板子库 | ||
| + | |||
| + | |||