zoukankan      html  css  js  c++  java
  • 「总结」多项式生成函数例题(4)

    就是大概做点题:

    1.(车万题?)哈德曼的妖怪少女
    http://121.17.168.211:8005/contest/275/problem/2
    这个题考场上不会复合逆,打表出了小于6的,剩下的部分就可以直接用类似数树的方法用(exp)统计了。
    然后说一下正解。

    其实这个题分两步。
    第一步:求出大小为某个数的边双的方案数。
    第二步:用类似数树的方法组合各个边双,成为一颗边双树。
    对于做过了数树的我来说第二步仅仅是一个套路。
    难点在于第一步。
    不妨先计算有根边双的数目。
    (b_i)(i)个点的有根边双数目,(d_i)(i)个点的连通图个数。
    设:

    [B(x)=sumlimits_{i=0}^{+infty}frac{b_ix^i}{i!} ]

    [D(x)=sumlimits_{i=0}^{+infty}frac{d_ix^i}{i!} ]

    我们枚举根所在的边双的大小。
    紧接着统计和这个边双连接的边所作出的贡献。
    这个边一端连接着边双,另一侧连接着一个连通图。
    设这些边在不考虑边双内部结构情况下,(n)个点的边双连接着(i)个连通图的方案数的生成函数为(G_n(x))
    那么:

    [G_n(x)=sumlimits_{i=0}^{+infty}frac{(nD(x))^i}{i!}=e^{nD(x)} ]

    那么一张无向连通图的方案数的生成函数就是:

    [D(x)=sumlimits_{i=0}^{+infty}frac{b_iG_i(x)x^i}{i!}=sumlimits_{i=0}^{+infty}frac{b_ie^{iD(x)}x^i}{i!}=B(xe^{D(x)}) ]

    (P(x)=xe^{D(x)})
    那么:

    [D(x)=B(P(x)) ]

    可以用扩展拉格朗日反演来求我们所需要的(B)的某一项!
    对这个公式应用扩展拉格朗日反演。

    [b_n=frac{1}{n}[x^{n-1}]D'(x)left(frac{x}{P(x)} ight)^n ]

    然后(D)的话我之前讲过城市规划那个题的另外一种做法,直接求(ln)的,可以在我那篇 讲解(3)中找到。
    这样的话我们利用(ln)(exp)就可以在(nlogn)的时间内求出所有需要的(b_i)
    剩下的部分是把这些边双组合起来。
    考虑现在是一堆连通块需要联通成为一棵树。
    这个方案可以用(prufer)序列计数,设连通块个数是(m),每个连通块的大小是(a_i),那么方案数是:

    [n^{m-2}prodlimits_{i=1}^{m}a_i=frac{n^mprodlimits_{i=1}^{m}a_i}{n^2} ]

    这样的话每一个连通块的贡献都是(na_i)
    我们的有根计数已经算上了(a_i),现在给每一项都乘上(n)即可,因为有编号所以用(egf)
    设一个连通块对答案贡献的指数型生成函数是:

    [A(x)=sumlimits_{i=0}^{+infty}[iin S]frac{b_inx^i}{i!} ]

    设大小为(i)个点的答案的(egf)函数为:(F(x))
    那么:

    [F(x)=sumlimits_{i=0}^{+infty}frac{A^i(x)}{i!}=e^{A(x)} ]

    这样就简单了。
    直接(exp)即可。
    然后答案就是:

    [ans=frac{n![x^n]F(x)}{n^2} ]

    问题就解决了。

    2.大朋友和多叉树
    https://www.lydsy.com/JudgeOnline/problem.php?id=3684
    这个题就更简单一点了。
    然而打个多项式全家桶一晚上就过去了。。。
    还是不够熟练啊。
    首先发现似乎是(MTT),分解一下模数发现虚惊一场。
    仍然可以用(NTT),原根是7。
    然后考虑一颗以根点权为下标的方案的生成函数。
    因为只考虑树的形态,所以是(OGF)
    那么设这个函数为(G(x)=sumlimits_{i=0}^{+infty}a_ix^i)
    有:

    [G(x)=x+sumlimits_{iin S}G^i(x) ]

    也就是说,一个点要么是叶子,,要么是某个子树,子树的个数是有限制的,加入这个限制就是这个样子了。
    变换一下:

    [G(x)-sumlimits_{iin S}G^i(x)=x ]

    [F(G(x))=x ]

    [F(x)=x-sumlimits_{iin S}x^i ]

    这样可以发现(F(x),G(x))互为复合逆。
    直接用拉格朗日反演:

    [[x^n]G(x)=frac{1}{n}[x^{n-1}](frac{x}{F(x)})^n ]

    这样写个全家桶就行了。

  • 相关阅读:
    selenium iframe 定位 qq空间说说
    单个 进程网速 消耗 网路 带宽
    网页加速
    baidu 验证网站 一一映射
    内容原发网站seo不重视2个标签,导致seo效果不如转发网站
    vi shell 的水平 决定了 手机shell 办公的效率
    键盘控制鼠标
    seo 谷歌去年悄然收购这家英国硬件公司
    视频 爬虫
    python 深浅 拷贝
  • 原文地址:https://www.cnblogs.com/Lrefrain/p/12313757.html
Copyright © 2011-2022 走看看