zoukankan      html  css  js  c++  java
  • 51nod 1907(多项式乘法启发式合并)

    题目:

    分析:

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

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

      我们去考虑每条边的贡献

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

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

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

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

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

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

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

  • 相关阅读:
    android AndroidManifest.xml package名
    java 空字条串空判断 效率
    ant
    android post 提交数据
    BI 商务智能软件 数据分析
    swfupdate flash上传工具
    log4j 使用方法
    java vc vb 项目结构
    时间单位
    iphone命令行编译xcodebuild
  • 原文地址:https://www.cnblogs.com/wmrv587/p/7481969.html
Copyright © 2011-2022 走看看