• cojs 二分图计数问题1-3 题解报告


    OwO 良心的FFT练手题,包含了所有的多项式基本运算呢

    其中一部分解法参考了myy的uoj的blog

    二分图计数 1:

    实际是求所有图的二分图染色方案和

    我们不妨枚举这个图中有多少个黑点

    在n个点中选出k个黑点的方案为C(n,k)

    白点和黑点之间任意连边,方案为2^(k*(n-k))

    所以得到f(n)=sigma(C(n,k)*2^(k*(n-k))

    由于本题只需要求解一个f(n),枚举并计算就可以了

    更高端一点的做法是这样的:

    我们可以利用在<DAG计数问题 题解报告>中提到的技巧将n*k拆开

    即n*k=n^2/2+k^2/2-(n-k)^2/2

    这样我们会得到一个可以FFT的形式,之后做一遍FFT就可以求出1-n的所有f值了

    二分图计数 2:

    实际是求所有图中二分图的个数

    设一个二分图有k个联通块,那么对于染色方案数的贡献就是2^k

    设n个点的二分图的生成函数为多项式g,上一个问题的生成函数为多项式f

    由于k个联通块的子集有2^k个,所以不难发现存在g^2=f

    因为任意一个二分图都会在卷积的过程中被重复计算2^k次

    这样我们就得到g=sqrt(f) 多项式开根即可

    二分图计数 3:

    实际是求所有图中联通二分图的个数

    设n个点的联通二分图的生成函数为h

    由于二分图是由若干个联通二分图组成的

    所以得到e^h=g,变形得h=ln(g),多项式求ln即可

    考虑一种更好的做法

    我们定义n个点的联通二分图的染色方案总数为多项式t

    显然h=t/2,问题转化成如何求t

    同理我们可以得到e^t=f,变形得t=ln(f),那么我们对f做多项式求ln之后把系数除以2即可

    所以进而我们也可以得到<二分图计数 2>的另一种做法

    就是利用上面的方法求出h之后做多项式求exp就可以求解出g了

  • 相关阅读:
    Windows Phone 应用程序的全球化 狼人:
    幽默:编程语言 / 操作系统
    幽默:编程语言 / 操作系统
    程序员的幽默
    游戏杆编程心得二:如何判断按钮的有效按下
    DirectX 7.0 SDK在VC 6.0环境中使用的注意事项
    游戏杆编程心得
    HTML 5 WebSocket 示例
    HTML 5 WebSocket 示例
    慎用VC 6.0
  • 原文地址:https://www.cnblogs.com/joyouth/p/5688633.html
Copyright © 2020-2023  润新知