zoukankan      html  css  js  c++  java
  • 【清华集训2017】 生成树计数

    • 题目链接

      luoguP4002

      uoj#335

      loj#2320

    • 题意

      见题面

    • 题解

      • 前置知识

        \(prufer\)序列

        关于生成树的计数问题,我们又一个工具叫\(prufer\)序列,简单来说每一个生成树都与一个\(prufer\)序列一一对应,并且每一个点在\(prufer\)序中的出现次数为度数\(-1\),这是最重要的性质,跟\(prufer\)序的构造方式有关,详细请自行学习。

      • 根据\(prufer\)序,我们可以写出\(ans\)的式子:

        \[ans=\sum \frac{(n-2)!}{\prod d_i!}\left(\prod_i (di+1)^m a^{d_i+1}\right)\left(\sum_i (di+1)^m\right) \]

        这个式子很不好求,我们将一些定量提出来,并将\(\frac{1}{\prod d_i!}\)放到里面,再推一推式子,就能化成:

        \[ans=(n-2)!\prod a_i \sum \left(\sum_i\frac{(d_i+1)^{2m}}{d_i!}a_i^{d_i} \prod_{j\neq i} \frac{(d_j+1)^m}{d_i!} a_j^{d_i}\right) \]

        这时我们可以大胆猜测利用多项式,但发现\(a_i^{d_i}\)很不好搞,但是这个在多项式内和第\(i\)项的\(x\)的幂是一样的,可以合并,所以设

        \[A(x)=\sum_i \frac{(i+1)^{2m}}{i!}x^i\\ B(x)=\sum_i \frac{(i+1)^{m}}{i!}x^i \]

        那么

        \[ans=(n-2)!\prod a_i \sum \left(\sum_i A(a_ix)\prod_{j\neq i} B(a_jx)\right) \]

        将后面的连乘补全

        \[ans=(n-2)!\prod a_i\sum\left(\sum_i \frac{A(a_ix)}{B(a_ix)}\right)\left(\prod_iB(a_jx)\right) \]

        所以我们要求的就是后面的式子。

        求和可以直接做,连乘先\(ln\)\(exp\)也能做。但是因为每一项都都带了一个\(a_i\),所以我们现在的问题就是在求出\(\frac{A}{B}\)\(\prod B\)后怎么把\(a_i\)变成系数。

        设其中一个函数为\(F\),第\(i\)次项系数为\(f_i\),所以

        \[\sum_iF(a_ix)=\sum_i\sum_jf_ja_i^jx^j=\sum_if_i\left(\sum_j a_j^i\right)x^i \]

        那么我们考虑对于每一个\(k\),求出\(\sum_i a_i^k\)

        这有一个简单的方法,令这个的生成函数为\(G\),那么

        \[G(x)=\sum_i\sum_j a_i^jx^j=\sum_i\frac{1}{1-a_ix} \]

        求和不好做,但是如果是求积就可以分治\(fft\),所以将求和转为求积,考虑\(ln\),因为有分式,所以考虑\(ln\)后的求导。

        那么很自然想到

        \[(\ln(1-a_ix))'=-\frac{a_i}{1-a_ix}=\frac{1}{x}\left(1-\frac{1}{1-a_ix}\right) \]

        那么

        \[\frac{1}{1-a_ix}=1-x(\ln(1-a_ix))' \]

        所以

        \[G(x)=\sum_i\frac{1}{1-a_ix}=n-x\sum_i(\ln(1-a_ix))'=n-x\ln\left(\prod_i(1-a_ix)\right)' \]

        这样就可以直接分治\(fft\),总复杂度\(O(nlog^2n)\),瓶颈在两个分治\(fft\)其他的常数也挺大的

  • 相关阅读:
    java在线学习-mybatis的缓存类及作用
    java架构师学习路线-MyBatis中的一些概念
    java架构师学习路线-Mybatis中单例模式的介绍
    java架构师学习路线-Mybatis中Builder模式的介绍
    竞赛图中三元环的期望个数
    求一个点前面第一个大于等于当前值的位置
    CF623D Birthday
    联赛模拟测试33
    网络流
    联赛模拟测试32
  • 原文地址:https://www.cnblogs.com/leukocyte/p/13406854.html
Copyright © 2011-2022 走看看