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)\)

    代码

  • 相关阅读:
    解决UITableView中Cell重用机制导致内容出错的方法总结
    Hdu 1052 Tian Ji -- The Horse Racing
    Hdu 1009 FatMouse' Trade
    hdu 2037 今年暑假不AC
    hdu 1559 最大子矩阵
    hdu 1004 Let the Balloon Rise
    Hdu 1214 圆桌会议
    Hdu 1081 To The Max
    Hdu 2845 Beans
    Hdu 2955 Robberies 0/1背包
  • 原文地址:https://www.cnblogs.com/xiaoziyao/p/15750378.html
Copyright © 2011-2022 走看看