zoukankan      html  css  js  c++  java
  • P5206 [WC2019]数树 解题报告

    P5206 [WC2019]数树 解题报告:

    更好的阅读体验

    前置知识

    子集反演

    子集反演的一般形式为:

    \[g(S)=\sum_{T\subseteq S}f(T)\Leftrightarrow f(S)=\sum_{T\subseteq S}(-1)^{|S|-|T|}g(T) \]

    下文中运用的子集反演特指其特殊形式:

    \[f(S)=\sum_{T\subseteq S}\sum_{P\in T} \]

    凯莱定理的一个扩展

    具体可见 CF156D 以及 OI-Wiki Prufer 序列

    \(k\) 个树组成的森林,第 \(i\) 个森林大小为 \(a_i\) 则将这些连通块连接成一棵树的方案数为

    \[n^{k-2}\prod_{i=1}^k a_i \]

    题意

    略。

    分析

    问题 \(0\)

    比较简单,取出蓝/红树边集的交,会形成若干连通块,每个连通块颜色相同,于是答案是 \(y^c\)。(\(c\) 为连通块数量)

    用个 map 统计即可,复杂度 \(O(n\log n)\)

    问题 \(1\)

    令蓝树的边集为 \(E\),考虑枚举红树边集,那么答案是:

    \[\sum_{T}y^{n-|S\cap T|} \]

    对上式施加子集反演(前置知识 \(1\))有:(令 \(g(S)\)\(S\) 为边集子集的方案数)

    \[\sum_T\sum_{P\subseteq S\cap T}\sum_{Q\subseteq P}(-1)^{|P|-|Q|}y^{n-|Q|}\\=\sum_{P\subseteq S}g(P)\sum_{Q\subseteq P}(-1)^{|P|-|Q|}y^{n-|Q|}\\=\sum_{P\subseteq S}g(P)y^{n-|P|}\sum_{Q\subseteq P}(-y)^{|P|-|Q|}\\=\sum_{P\subseteq S} g(P)y^{n-|P|}\sum_{i=0}^{|P|}{|P|\choose i}(-y)^{|P|-i}\\=\sum_{P\subseteq S}g(P)y^{n-|P|}(1-y)^{|P|} \]

    然后运用前置知识 \(2\),设一共有 \(r=N-|p|\) 个连通块,\(a_i\) 为第 \(i\) 个连通块大小,那么有:

    \[\sum_{P\subseteq S}y^{r}(1-y)^{n-r}n^{r-2}\prod_{i=1}^r a_i\\=\frac{(1-y)^n}{n^2}\sum_{P\subseteq S}\prod_{i=1}^r(\frac{yn}{1-y}\cdot a_i) \]

    考虑组合意义,上式相当于在树上选择若干个连通块,每个连通块造成 \(\frac{yn}{1-y}\cdot a_i\) 的贡献,所有连通块贡献之积的和。而 \(a_i\) 不好处理,继续组合意义,相当于连通块任选一个数的方案。

    那么就可以设计出一个 dp,令 \(f_{i,k\subseteq\{1,0\}}\) 表示 \(i\) 的子树,当前连通块做出/没有做出贡献的答案之和,转移很好转移,复杂度 \(O(n)\)

    问题 \(2\)

    仍然采用上面的方法推一遍:

    \[\sum_S\sum_T y^{n-|S\cap T|}\\=\sum_S\sum_T\sum_{P\subseteq S\cap T}\sum_{Q\subseteq P}y^{n-|Q|}\\=\sum_P (g(P))^2 y^{n-|P|}(1-y)^{|P|}\\=\sum_P y^r(1-y)^{n-r}(n^{r-2}\prod_{i=1}^r a_i)^2\\=\frac{(1-y)^n}{n^4}\sum_P\prod_{i=1}^r(\frac{yn^2}{(1-y)}\cdot a_i^2) \]

    枚举 \(A\) 作为 \(a_i\) 代表的可重集,令 \(h(A)\) 为生成的集合为 \(A\) 的边集数量,那么有:

    \[\frac{(1-y)^n}{n^4}\sum_{A}h(A)\prod_{i=1}^{|A|}(\frac{yn^2}{1-y}\cdot a_i^2) \]

    可以发现 \(h(A)\) 代表 \(n\) 个有标号点放入 \(|A|\) 个无标号盒子,盒子内球数量集合为 \(A\),且每个无标号盒子内组成一个无根树的方案数,那么可以得到:

    \[h(A)=\frac{1}{|A|!}\frac{n!}{\prod_{i=1}^{|A|} a_i!}\prod_{i=1}^{|A|} a_i^{a_i-2} \]

    带入上面有:

    \[\frac{(1-y)^m}{n^4}\sum_A\frac{n!}{|A|!}\prod_{i=1}^{|A|}(\frac{yn^2}{1-y}\cdot\frac{a_i^{a_i}}{a_i!}) \]

    (上面的推导只是为了让得到生成函数更加简单)

    我们发现这是一个生成函数形式,具体地设 EGF \(G(x)\) 为:

    \[G(x)=\sum_{k}\frac{yn^2}{1-y}\cdot\frac{k^k}{k!} \]

    那么答案为:

    \[\frac{(1-y)^m}{n^4}[x^n]\sum_{k=1}^n\frac{G^k(x)}{k!}\\=\frac{(1-y)^m}{n^4}[x^n]\exp G(x) \]

    于是直接上多项式板子就好了,时间复杂度 \(O(n\log n)\)

    代码

  • 相关阅读:
    vb.net的数据类型
    PHP常用函数
    399. Evaluate Division
    329. Longest Increasing Path in a Matrix
    415. Add Strings
    463 Island Perimeter
    400. Nth Digit
    401. Binary Watch
    391. Perfect Rectangle
    406. Queue Reconstruction by Height
  • 原文地址:https://www.cnblogs.com/xiaoziyao/p/15750378.html
Copyright © 2011-2022 走看看