树 题解

树 题解

题目链接

这题好像有不少有意思的卡常小技巧,顺便熟悉一下 burnside 引理

Burnside 引理

直接上 Burnside 可以发现,答案是 1n=i=0n1w(i) 这里 w(i) 是指转 i 个数之后和自己等价的组合类个数

修改 w(i) 的定义为具有 d|i 长度的循环节的合法生成树个数,容易发现答案为 1n=i=0n1w(gcd(i,n))

也就是 1n=id|nw(d)[gcd(i,n)=d] 交换枚举顺序,转而考虑对于每个 d 有多少个合法的 i

1nd|nw(d)i[gcd(i/d,n/d)=1]=1nd|nw(d)ϕ(nd)

以上都是显然的

考虑如何计算 w(d),发现就是轮子的生成树个数,这是简单的,有一个显然的 dp,写成矩阵形式有一个四阶的递推形式

简单消元之后发现其实没有那么长,只是 wn=3wn1wn2+2

这时候可以写成 3×3 的矩阵了,差分一下变成齐次的直接 bostan-mori 感觉就过了,但是考虑继续优化

fn=wn+kfn=3fn1fn2,容易解得 k=2,直接求 f 即可,矩阵大小是 2×2 的,卡常即可通过此题

莫反

考虑最上面 Burnside 引理部分我们得出的式子,也就是 "显然" 的那一部分,直觉告诉我们这个结论可以由容斥导出,考虑暴力莫反而不使用 Burnside 引理

f(i) 为最小循环节长度为 i 的方案数,g(i) 为存在循环节长度为 i 的方案数

则有 g(i)=d|if(d),莫反一下得到 f(i)=d|ig(d)μ(id)

答案是 1ni|nf(i)ni=1nnid|ig(d)μ(id)

交换求和顺序就能知道这是 1nd|ng(d)ϕ(nd)

容易发现这部分所说的 g 与上一部分中的 w 含义完全相同

posted @   wang54321  阅读(29)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示