计算烷烃的同分异构体个数

该博客介绍了计算烷烃同分异构体个数的方法,通过将问题转化为计数无标号无根树,并利用Polya定理、Burnside引理及FFT(快速傅里叶变换)进行高效计算。博主详细阐述了枚举子树、无根树的生成函数、置换计数、重心枚举等关键步骤,并讨论了多组询问的解决方案,涉及有根树、对称边的等价类等概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相当于计算度数不超过4的无标号无根树个数。按照无根树的套路,我们直接枚举子树即可。
但是无根树可以用exp来搞,这个度数有限制。
我们可以换一种方法,显然子树每个点度数不超过3,记其生成函数为 A A A,可以用Polya定义来计数:
首先假设儿子彼此有序,然后规定如果某个置换之后得到两个等价的东西,那么这两个算一个方案。 我们枚举每一个置换,利用Burnside引理,容易得到:
A = 1 + x 2 A ( x 3 ) + 3 A ( x 2 ) A ( x ) + A ( x ) 3 6 A=1+x\frac{2A(x^3)+3A(x^2)A(x)+A(x)^3}{6} A=1+x62A(x3)+3A(x2)A(x)+A(x)3

相当于每种置换的每个循环节内部必须严格相等。 枚举环然后系数就是这样的置换的个数,利用分治FFT在 O ( n log ⁡ 2 n ) O(n\log^2n) O(nlog2n)时间内预处理。

然后用经典的枚举重心的儿子的方法,就可以在 O ( n log ⁡ n ) O(n \log n ) O(nlogn)的时间内解决单组询问。

考虑如何解决多组询问,我们发现,对于任意一棵无根树,我们记其点的等价类为 p p p个,边的等价类有 q q q个,对称边(两边的点等价)有 s s s个,那么有$s\le 1 , 且 ,且 p-q+s=1$。

证明如下:
如果有对称边,那么显然 p − q = 0 → p − q + s = 1 p-q=0 \rightarrow p-q+s=1 pq=0pq+s=1
否则等价点不会为重心,重心等价类只有1个点,重心一定在其路径上,他们的父亲是等价边。 我们可以得到 p − q = 1 p-q=1 pq=1 (加上重心)。

然后求出 ∑ p , ∑ q , ∑ s \sum p , \sum q , \sum s p,q,s即可。

∑ p \sum p p相当于有根树计数,是4个儿子拼起来,同理用Polya可得:
P ( x ) = x 6 A ( x 4 ) + 6 A ( x 2 ) A 2 ( x ) + 3 A 2 ( x 2 ) + 8 A ( x 3 ) A ( x ) + A ( x 4 ) 24 P(x)=x\frac{6A(x^4)+6A(x^2)A^2(x)+3A^2(x^2)+8A(x^3)A(x)+A(x^4)}{24} P(x)=x24

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值