做法一

提供一个后半部分略微不同的做法。

首先,基环旋转同构肯定是用 Burnside 那套理论求不动点来解,设 \(f(n, m)\) 为每种颜色 \(/m\) 构成 \(n\) 棵(树之间有标号)无标号有根有序带颜色树的方案,那么答案为(记 \(G = \gcd(a_1, a_2, \cdots a_n)\)):

\[\begin{aligned}
& \ \ \ \ \ \sum\limits_{i = 2} ^ m \frac{1}{i} \sum\limits_{j \mid i} [\forall k \in [1, n], \frac{i}{j} \mid a_k] f(j, i / j) \varphi(i / j)\\
&= \sum\limits_{i = 2} ^ m \frac{1}{i} \sum\limits_{j \mid i} [j \mid G] f(i / j, j) \varphi(j)\\
&= \sum\limits_{i \mid G} \sum\limits_{i \mid j} \frac{1}{j}f(j / i, i)\varphi(i) - f(1, 1)
\end{aligned}
\]

考虑一下 \(f\) 怎么求,由于是无标号有根有序带颜色树的方案,可以先忽略颜色的限制,最后再染色即可。

令 \(g(s) = \frac{(m / s)!}{\prod\limits_{i = 1} ^ n (a_i / s)!}\),\(f'(n, m)\) 为 \(m\) 个点构成 \(n\) 棵(树之间有标号)无标号有根有序树的方案,则:

\[f(n, k) = g(k) \times f'(n, m / k)
\]

考虑怎么求 \(f\),注意到一颗无标号有根有序树方案为卡特兰数 \(C(x)\) 前一项的值,则有:

\[f'(m, n) = [x ^ n](xC(x)) ^ m
\]

有 \(C(x) = \frac{1 - \sqrt{1 - 4x}}{2x}, F(x) = xC(x) = \frac{1 - \sqrt{1 - 4x}}{2}\),易得 \(F(x)\) 复合逆 \(G(x) = x(1 - x)\),令 \(H(x) = x ^ m\),则根据扩展拉格朗日反演:

\[\begin{aligned}
f'(m, n) &= [x ^ n](xC(x)) ^ m\\
&= [x ^ n]H(F(x))\\
&= \frac{1}{n}[x ^ {n - 1}]H'(x)\left(\frac{x}{G(x)}\right) ^ n\\
&= \frac{m}{n}[x ^ {n - m}]\frac{1}{(1 - x) ^ n}\\
&= \frac{m}{n}\binom{2n - m - 1}{n - 1}
\end{aligned}
\]

当然,这个通项公式也存在一个组合解释,下面考虑 \([x ^ n]C ^ m(x)\) 的组合意义:

  • 所有合法长度为 \(2n\) 的完美匹配括号序列划分成 \(m\) 个完美匹配括号序列的方案,划分可以为空。

将括号序列转化为 \(1 / -1\) 排列的问题,可以将一个划分的末尾加上一个 \(-1\) 以示区分,为了方便 不在 最后放 \(-1\),发现此时的括号序列满足两个必要条件:

  • 有 \(n\) 个 \(1\) 和 \(n + m - 1\) 个 \(-1\).
  • 任意前缀前缀和 \(\ge -m + 1\).

此时容易证明这两个必要条件也是充要条件,将这个问题再转化,就是从 \((0, 0)\) 开始走到 \((n, n + m - 1)\) 不穿过 \(y = x + m - 1\) 的方案,这是一个经典问题,答案为:

\[\binom{2n + m - 1}{n} - \binom{2n + m - 1}{n - 1}
\]

此时通过简单化简就可以解释由拉格朗日反演导出的组合恒等式。


带回最初的答案式:

\[\frac{1}{m}\left(\sum\limits_{i \mid G} g(i) \varphi(i)\sum\limits_{j = 1} ^ {m / i} \binom{2(m / i) - j - 1}{m / i - 1} - g(1)\binom{2m - 2}{m - 1}\right)
\]

可以直接暴力计算,复杂度 \(\mathcal{O}(n\sigma_0(G) + \sigma_1(m))\).


做法二

将 \(f\) 直接带入初始的表达式:

\[\begin{aligned}
& \ \ \ \ \ \sum\limits_{i \mid G} \sum\limits_{i \mid j} \frac{1}{j}f(j / i, i)\varphi(i) - f(1, 1)\\
&= \sum\limits_{i \mid G} g(i)\varphi(i) \sum\limits_{i \mid j} \frac{1}{j} [x ^ {m / i}]F ^ {j / i}(x) - \frac{1}{m}g(1)\binom{2m - 2}{m - 1}\\
&= \sum\limits_{i \mid G} \frac{1}{i}g(i)\varphi(i) [x ^ {m / i}]\sum\limits_{j = 1} ^ {m / i} \frac{F ^ {j}(x)}{j} - \frac{1}{m}g(1)\binom{2m - 2}{m - 1}\\
&= \sum\limits_{i \mid G} \frac{1}{i}g(i)\varphi(i) [x ^ {m / i}]\sum\limits_{j = 1} ^ \infty \frac{F ^ {j}(x)}{j} - \frac{1}{m}g(1)\binom{2m - 2}{m - 1}\\
&= \sum\limits_{i \mid G} \frac{1}{i}g(i)\varphi(i) [x ^ {m / i}]-\ln(1 - F(x)) - \frac{1}{m}g(1)\binom{2m - 2}{m - 1}\\
\end{aligned}
\]

于是可以先多项式求 \(\ln\) 再直接暴力统计,复杂度 \(\mathcal{O}(m \log m + n\sigma_0(G))\),注意学习和式修改上界的技巧。

最新文章

  1. [LeetCode] Combination Sum 组合之和
  2. jQuery.extend和jQuery.fn.extend的区别【转】
  3. C# Lamada表达式
  4. net命令
  5. Scala特性: 隐式转换
  6. 手机触摸touch事件
  7. Android调用系统相册和拍照的Demo
  8. [设计模式] javascript 之 装饰者模式
  9. Java静态代码分析工具——FindBugs插件的安装与使用
  10. HTML+CSS学习笔记(3)- 认识标签(2)
  11. markdown2 在win10下无法预览解决方案
  12. 《第一行代码》学习笔记1-Android系统架构
  13. The FastCGI process exited unexpectedly
  14. SSH框架-unexpected token: * near line 1, column 8 [select * from tb_chaper where course_id = 2];报错解决方法
  15. 通过哨兵机制实现Redis主从配置以及java调用
  16. Python进行文本处理
  17. 获取SHA1
  18. LeetCode & Q169-Majority Element-Easy
  19. Codeforces Round#402(Div.1)掉分记+题解
  20. 第六周博客作业 <西北师范大学| 周安伟>

热门文章

  1. Blazor组件的new使用方式与动态弹窗
  2. JDBC编程工具类 Dbconnection
  3. SpringBoot集成MyBatis-Plus代码生成器(Dao)
  4. Solon 1.6.12 发布,类似 Spring 的生态体系
  5. 《手把手教你》系列技巧篇(五十四)-java+ selenium自动化测试-上传文件-中篇(详细教程)
  6. CSS 基础 选择器的使用汇总
  7. Java|从Integer和int的区别认识包装类
  8. spring boot --- 注解 @Bean 和@Component
  9. Linux上天之路(四)之Linux界面介绍
  10. Echart可视化学习(九)