51nod 1907(多项式乘法启发式合并)

本文探讨了在仙人掌图中生成子图的计数问题,特别是针对不同连通块数量的生成子图。通过分析树边与回路边对生成函数的贡献,提出了一种启发式合并的方法来优化计算过程。

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

题目:

分析:

  对于一个确定的生成子图,很明显是在一个连通块上走,走完了再跳到另一个连通块上,假设连通块个数为cnt,那么答案一定是$min(a_{cnt-1},a_cnt,..,a_{n-1})$

    那现在的问题就是如何求出对于原图而言,连通块个数分别为1,2..n的生成子图的个数

  我们去考虑每条边的贡献

  在一个仙人掌上只有树边和回路上的边,对于树边如果删除那么肯定连通块个数+1,对于回路上的边,删除一条边不影响,再后面每删除一条边连通块个数+1

  我们可以写出它们的生成函数,然后乘起来

  对于树边的生成函数明显是$1+x$

  对于长度为k的回路,生成函数是$1+\binom{k}{1}+\binom{k}{2}x+\binom{k}{3}x^2+...+\binom{k}{k}x^{k-1}$

  然后将它们都乘起来就行了,但这样会TLE

  最坏的情况是$(1+x)^n$,这样相当于退化成$O(n^2logn)$,这是因为每次拿一个低阶多项式和一个高阶多项式相乘很浪费时间

  可以采取启发式合并,类似合并果子,每次取阶数最小的两个多项式进行NTT相乘,这样时间复杂度就是$O(nlog^2n)$的了

转载于:https://www.cnblogs.com/wmrv587/p/7481969.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值