Solution

  
  对于原树一个节点\(x\):
  
  \(f_x(h)\)表示,\(x\)作为一个深度为\(h\)的点时,\(x\)及其子树的安排方案有多少(不考虑\(x\)具体在深度为\(h\)的哪个点)
    
  \(F_x(h)\)表示,对于一个固定的深度为\(h\)的节点\(y\),\(x\)在\(y\)或其子树中,\(x\)及其子树的安排方案有多少。
  
  则有关系:
\[
F_x(h)=\sum_{i\ge h}f_x(i)*2^{i-h}
\]
  对于叶子:
\[
F_x(h)=[h\le h_x]2^{h_x-h}
\]
  已知二者都可以表示成这些形式
\[
f_x(h)=\sum_{i\geq 0}c_i*2^{-ih}\\
F_x(h)=\sum_{i\geq 0}c_i*2^{-ih}
\]
  对于叶子\(x\),赋值后直接回溯:
\[
c_1=2^{h_x}
\]
  
  依照60分DP,可以推出由儿子到自己的转移(两个\(c\)分别是两个\(F\)的\(c\),\(c'\)是转移后的\(f_x\)的\(c\)):
\[
\begin{aligned}
f_x(h)&=F_l(h+1)F_r(h+1)\\
&=(\sum_{i\geq 0}c_i2^{-i(h+1)})(\sum_{j\geq 0}c_j2^{-j(h+1)})\\
&=(\sum_{i\geq 0}\frac{c_i}{2^i}2^{-ih})(\sum_{j\geq 0}\frac{c_j}{2^j}2^{-jh})\\
&=\sum_{i\ge0}{c'}_i2^{-ih}\\
\end{aligned}
\]
  当然,也可以在卷积完之后每个\(c_i\)除去\(2^i\)
  
  观察到这个卷积,再考虑边界,\(c\)的下标为\(0...siz[x]\),\(siz[x]\)为\(x\)子树中叶子数。暴力卷积,用树上背包思路分析,这一步的复杂度是全局\(\mathcal O(n^2)\)的
  
  得到自己的\(f\)后,由于父亲要使用自己的\(F\),所以根据定义式由\(f\)推出\(F\):
\[
\begin{aligned}
F_x(h)&=\sum_{h \le i<maxh}f_x(i)*2^{i-h}\\
&=\sum_{h \le i<maxh}\sum_{j\ge 0}c_j*2^{i(1-j)-h}\\
&=\sum_{j\ge0}\frac{c_j}{2^h}\sum_{h \le i<maxh}(2^{(1-j)})^i\\
&=\sum_{j\ge0}\frac{c_j}{2^h}\frac{(2^{1-j})^{maxh}-(2^{1-j})^{h}}{(2^{1-j})-1}\\
&=\sum_{j\ge 0}c_j(\frac{2^{(1-j)maxh}}{2^{1-j}-1}2^{-h}-\frac{1}{2^{1-j}-1}2^{-jh})
\end{aligned}
\]
  答案即\(F_1(0)\),\(\sum c_i\)
  
  PS:\(c_0\)没用

harmakik的更多相关文章

随机推荐

  1. RabbmitMQ-Publish/Subscribe

    之前的学习中,我们了解的工作队列实现的是:一个消息只发送到一个消费者. 现在我们来学习一下新模式:发布/订阅模式 之前我们在原理中介绍了exchange,但好像并没有使用.而是直接往队列里发消息和取消 ...

  2. [转]The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

    完整错误信息: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS"AS IS" AND ANY ...

  3. IOC框架之 Unity 入门

    十年河东,十年河西,莫欺少年穷 学无止境,精益求精 Unity是什么? Unity是patterns & practices团队开发的一个轻量级.可扩展的依赖注入容器,具有如下的特性: 1. ...

  4. .net core实践系列之短信服务-Api的SDK的实现与测试

    前言 上一篇<.net core实践系列之短信服务-Sikiro.SMS.Api服务的实现>讲解了API的设计与实现,本篇主要讲解编写接口的SDK编写还有API的测试. 或许有些人会认为, ...

  5. 【javascript】详解javaScript的深拷贝

        前言: 最开始意识到深拷贝的重要性是在我使用redux的时候(react + redux), redux的机制要求在reducer中必须返回一个新的对象,而不能对原来的对象做改动,事实上,当时 ...

  6. VMware workstation运维实践系列博客导航

    第一章:VMware workstation虚拟化1.1 VMware workstation计算网络存储介绍1.2 VMware workstation其他功能特性介绍1.3 VMware work ...

  7. BUAAMOOC项目M2 postmortem

    设想和目标 1.我们的软件要解决什么问题?是否定义的很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件是基于北航MOOC网站做的Android手机客户端,用于便捷的在学校里通过手机做到随时随地 ...

  8. 使用Junit进行单元测试

    使用Junit进行单元测试 一.目的和要求 JUnit是一款由Erich Gamma(<设计模式>的作者)和Kent Beck(极限编程的提出者)编写的开源的回归测试框架,供Java编码人 ...

  9. a simple example for spring AOP

    /** * Created by Administrator on 2015/11/25. * a interface */public interface ArithmeticCalculator{ ...

  10. 基础-Math.floor与parseInt区别

    Math.floor只能对一个数向下取整,不能解析字符串 如: Math.floor(1.5) // 1 Math.floor(-2.1) // -3 Math.floor("3" ...