看见无论是官方题解还是其他人写的一些东西都讲了很多群论相关,在这里给出一个看起来没有什么群论的思路。
我们不妨先假设能搞出一个等价类意义上的树的集合 T \mathscr T T,那答案就是
1 ( n − 1 ) ! k ∑ T ∈ T ways ( T ) k \frac1{(n-1)!^k} \sum_{T \in \mathscr T} \operatorname {ways}(T)^k (n−1)!k1T∈T∑ways(T)k
而对于 ways ( T ) \operatorname {ways} (T) ways(T) 怎么表示,我们容易想到有根树的每一个单步都是集合,就等同于一个 exp 的构造,所以对于一个树 T T T,它的几个孩子是 T 1 , T 2 , … , T j T_1,T_2,\dots, T_j T1,T2,…,Tj,那么我们不妨不严谨地写作 T ′ = [ { T 1 , T 2 , … , T j } ] exp ( T ) T' =[\{T_1, T_2, \dots, T_j\}]\exp (\mathscr T) T′=[{T1,T2,…,Tj}]exp(T)(这里求导就是去掉了根节点。)当然这个其实是方案数除以了 n ! n! n!,所以我们外面不用除 ( n − 1 ) ! k (n-1)!^k (n−1)!k 而是改成乘以 n k n^k nk 就可以了。
好,但是我们实际要求的求和是 k k k 次方,因此我们要思考一下如何修补原来在干的事情。
对于求导计算的反结果我们现在不妨记作 ∫ \int ∫,原本的效果是把一颗有 n − 1 n-1 n−1 个节点的树变成 1 n \frac 1n n1 倍的有 n n n 个节点的树 ∫ : α ( x n − 1 ) ↦ 1 n α ( x n ) \int : \alpha (x^{n-1}) \mapsto \frac 1n\alpha (x^n) ∫:α(xn−1)↦n1α(xn),现在如果为了完全为我们的目的服务,需要变成
∫ ~ : α ( x n − 1 ) ↦ 1 n k α ( x n ) \tilde {\textstyle \int} : \alpha(x^{n-1}) \mapsto \frac 1{n^k} \alpha(x^n) ∫~:α(xn−1)↦nk1α(xn)
而原本有 exp : α ↦ 1 + α + α 2 2 ! + α 3 3 ! + ⋯ \exp : \alpha \mapsto 1 + \alpha + \frac{\alpha^2}{2!} + \frac{\alpha^3}{3!} + \cdots exp:α↦1+α+2!α2+3!α3+⋯,现在变成
E X P : α ↦ 1 + α + α 2 2 ! k + α 3 3 ! k + ⋯ \operatorname{\mathcal {EXP}} : \alpha \mapsto 1 + \alpha + \frac{\alpha^2}{2!^k} + \frac{\alpha^3}{3!^k} + \cdots EXP:α↦1+α+2!kα2+3!kα3+⋯
这会发生什么呢?我们发现这导致我们的运算产生了严重的问题,我们一直以来进行的运算维护的实际上是这些对象的直接加和:
∑ α ( x n ) ∈ C ∣ α ∣ x n \sum_{\alpha (x^n) \in \mathcal C} |\alpha|x^n α(xn)∈C∑∣α∣xn
与此同时,新的运算 E X P ( f + g ) ≠ E X P f ⋅ E X P g \operatorname{\mathcal {EXP}} (f + g) \neq \operatorname{\mathcal {EXP}} f \cdot \operatorname{\mathcal {EXP}} g EXP(f+g)=EXPf⋅EXPg。这意味着我们一直以来构造的集合 ↦ \mapsto ↦ 一元生成函数在引入这个运算的情况下已经不保我们在平时的情况下以为的那个“同态”了!但庆幸的是,我们不妨先尝试增大我们维护的信息量,变成
C ↦ ∑ α ( x n ) ∈ C ( 1 + ∣ α ∣ t + ∣ α ∣ 2 t 2 + ⋯ ) x n \mathcal C \mapsto \sum_{\alpha (x^n) \in \mathcal C} (1+ |\alpha|t + |\alpha|^2t^2 + \cdots) x^n C↦α(xn)∈C∑(1+∣α∣t+∣α∣2t2+⋯)xn
说人话就是对于一个 n n n,维护对应的所有实际对象的 1 , 2 , 3 , … 1,2,3,\dots 1,2,3,… 次方和。
不难验证,组合类 C \mathcal C C 上的并集直接对应加法,乘积集对应于 x x x 元上的卷积, t t t 元上的点积。
我们考虑对于 E X P \operatorname{\mathcal {EXP}} EXP,其实我们的诉求就是计算出
∏ α ( x n ) ∈ C E X P α ( x n ) ↦ ∏ α ( x n ) ∈ C E X P [ 1 1 − ∣ α ∣ t x n ] \prod_{\alpha (x^n) \in \mathcal C} \operatorname{\mathcal {EXP}} \alpha (x^n) \mapsto \prod_{\alpha (x^n) \in \mathcal C} \operatorname{\mathcal {EXP}} \left[ \frac1 {1-|\alpha|t}x^n\right] α(xn)∈C∏EXPα(xn)↦α(xn)∈C∏EXP[1−∣α∣t1xn]
现在的主要问题其实就是对于同样的 n n n,我们该如何把这个对应的 n n n 的所有组合对象的 E X P \operatorname{\mathcal {EXP}} EXP 值的乘积算出来。
在这之前我们需要明确 E X P \operatorname{\mathcal {EXP}} EXP 对于 t t t 上累积的信息的影响。
具体的对象的生成关系是
E X P : [ ∑ r ( ∣ α ∣ t ) r ] x n ↦ ∑ j ≥ 0 [ ∑ r ( ∣ α ∣ j t j ! k ) r ] x n j \operatorname{\mathcal {EXP}} : \left[\sum_r (|\alpha|t)^r\right] x^n \mapsto \sum_{j\ge 0} \left[\sum_r \left(\frac{|\alpha|^jt}{j!^{k}}\right)^r\right] x^{nj} EXP:[r∑(∣α∣t)r]xn↦j≥0∑[r∑(j!k∣α∣jt)r]xnj
这里要注意 j ! k j!^k j!k 是除在里面而不是外面,因为这还是“一个对象”(其实考察 t 0 t^0 t0 次项容易确认这一事实)
之后注意到乘积能直接对应 t t t 点乘意义上 x x x 的卷积,那么我们就可以通过 ln \ln ln 做乘法 ⇔ \Leftrightarrow ⇔ 加法从而转为线性映射。我们发现对于变换 Ψ \Psi Ψ,统计 ∏ α Ψ \prod_\alpha \Psi ∏αΨ 本身也可以直接转为 ∑ ( ln ∘ Ψ ) α \sum (\ln \circ \Psi) \alpha ∑(ln∘Ψ)α 来统计,这里利用了一个很好的性质就是对于同度量的组合对象,线性映射: φ ( α + β ) ↦ φ ( α ) + φ ( β ) \varphi(\alpha + \beta) \mapsto \varphi(\alpha) + \varphi(\beta) φ(α+β)↦φ(α)+φ(β) 当我们在外层套一个线性映射 ln ∘ Ψ \ln \circ \Psi ln∘Ψ 的时候,我们就得到了 ln ∘ Ψ ( ∑ α ) = ∑ ln ∘ Ψ ( α ) \ln \circ \Psi \left(\sum \alpha\right) = \sum \ln \circ \Psi (\alpha) ln∘Ψ(∑α)=∑ln∘Ψ(α),因此我们存储的 ∑ α \sum \alpha ∑α 的信息足够我们还原 ∑ ln ∘ Ψ ( α ) \sum \ln \circ \Psi (\alpha) ∑ln∘Ψ(α),进而得到 ∏ Ψ ( α ) \prod \Psi (\alpha) ∏Ψ(α)!
总而言之,在这个计算环境下容易保线性性质却不容易保线性到积性的性质。
上面的叙述似乎几乎没谈到什么群论,但是真的无关吗?
我们不妨回顾一下一个经典的多重集变换 A ( x ) ↦ ∏ n ( 1 − x n ) − a n A(x) \mapsto \prod_n (1-x^n)^{-a_n} A(x)↦∏n(1−xn)−an,一个推导出它的方法是取对数再取指数:
∏ n ( 1 − x n ) − a n = exp ( ∑ n − a n ln ( 1 − x n ) ) = exp ( ∑ n a n ∑ k x n k k ) = exp ( ∑ k A ( x k ) k ) \begin{aligned} \prod_n (1-x^n)^{-a_n} &= \exp \left( \sum_n -a_n \ln (1-x^n) \right)\\ &= \exp \left( \sum_n a_n \sum_k \frac{x^{nk}}k \right)\\ &= \exp \left( \sum_k \frac{A(x^k)}k \right) \end{aligned} n∏(1−xn)−an=exp(n∑−anln(1−xn))=exp(n∑ank∑kxnk)=exp(k∑kA(xk))
进一步的,如果这个时候我们还统计元素的个数,就能得到 exp ( ∑ k A ( x k ) t k k ) \exp \left( \sum_k \frac{A(x^k)t^k}k \right) exp(∑kkA(xk)tk)。
(有人管这个叫 Euler 变换,但是我习惯沿用解析组合的叫法,管这个叫 Polya Exp)
所以它为什么能叫 Polya Exp 呢?我们考虑直接使用 Polya 原理来说明。对于我们枚举的一个置换 σ ∈ S n \sigma \in S_n σ∈Sn,最后又除掉了对称群的大小 n ! n! n!。我们发现这其实就等价于在建立 t t t 上的 EGF。我们可以直接考虑置换的环分解,这个结果必然能被表为一个 exp { C Y C L E } \exp \{ \mathcal{CYCLE} \} exp{CYCLE}。而一个置换环的结构是很简单的,对于一个组合对象 α ( x n ) \alpha(x^n) α(xn),它如果出现在一个大小为 k k k 的环里,那就变为 x n k x^{nk} xnk 的贡献,而且对于 EGF 来说贡献了 [ x k ] ln 1 1 − x = 1 k [x^k] \ln \frac 1{1-x} =\frac 1k [xk]ln1−x1=k1 次, A ( x k ) / k A(x^k)/k A(xk)/k 就是在 Polya 系数里的贡献了。
ln 和 exp 本身与置换群的亲密关系导致了我们可以直接通过其完成推导,而隐去关联的 Polya 原理。