CF 2001 E2 solution (967 Div.2)

news/2024/11/15 23:40:43/文章来源:https://www.cnblogs.com/spdarkle/p/18372329

CF 2001 E2

由于对称,所以设 \(heap[u]\) 为两次确定堆,且第一次弹出的是 \(u\)\(heap[u,v]\) 是第一次 \(u\) ,第二次 \(v\)

则答案就是 \(\sum heap[u]=2^{n-1}·heap[x]\)

其中 \(x\) 任意。

不妨我们考虑第一次都是从第一个叶子弹出,那么对于其他不同的第二个弹出的点,根据对称性显然有如下性质:

\(LCA(u,v_1)=LCA(u,v_2)\implies heap[u,v_1]=heap[u,v_2]\)

而经过手玩一下关系,可以发现:

5150c746-dbe9-4fd4-b3ef-c70d49092a1a

也就是设 \(L_1,R_1\) 是两个叶子的 \(LCA\) 的左右儿子,\(l,r\)\(L_1\) 的左右儿子(图稍微画错了点)

容易得到:

\[\begin{cases} l+r\le L_1\\ r<l<R_1<L_1 \end{cases} \]

而对于更上层的点,还是设当前点左右儿子是 \(L_1,R_1\)\(L_1\) 的儿子是 \(l,r\),则有:

\[\begin{cases} l+r\le L_1\\ l> R_1\\ r<l\\ R_1<L_1\\ \end{cases} \]

由 E1,我们求出了 \(f_{i,j}\):高为 \(i\) 的堆,操作 \(j\) 次,只弹出第一个叶子的方案数,以及 \(g_{i,j}\):操作 \(j\) 次的总局面个数

借用一张官解的图

我们会发现 \(L,R\to L'\) 的时候,\(R\) 是普通子树,而 \(R'\) 是一颗满足弹一次合法的子树。

所以 \(L'\) 的方案数可以由符合条件的 \(L,R\)\(f_{L}·g_R\) 构成,而总的方案数需要再用 \(f_{R'}\) 进行合并。

而用 \(f_{R'}\) 合并的时候要乘上 \(2^{h-2}\) 因为叶子任选其一。

而也有可能自身不是 \(LCA\),往上更新的时候直接算就行了,注意要拼上一个普通二叉堆个数。

所以可以设 \(dp_{h,l,r}\) 为高为 \(h\) 的树,左子树权值 \(l\),右子树权值为 \(r\) 的方案数。

那么有:

\[dp_{h,L_1,R_1}=\sum_{l=0}^{R_1-1}\sum_{r=0}^{\min(l-1,L_1-l)}f_{h-2,l}·g_{h-2,r}·f_{h-1,R_1}·2^{h-2}+\sum_{l=R_1+1}^{L_1-1}\sum_{r=0}^{\min(l-1,L_1-l)}dp_{h-1,l,r}·g_{h-1,R_1} \]

可以利用前缀和优化到 \(O(nk^2)\),例如前半部分,可以设 \(S_{x,y}=\sum_{l,r}f_{h-2,l}·g_{h-2,r}·[l+r=x][l=y][l>r]\),先做 \(y\) 这一维的前缀和,再做 \(x\) 这一维的前缀和即可。

后半部分同理。

code

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/784969.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytest和unittest的几个区别

主要区别1、安装需求:  pytest:作为第三方单元测试库,需要额外安装。  unittest:是Python标准库的一部分,无需额外安装。2、用例编写规则:  pytest:编写规则较为简单,兼容性好,可以执行unittest风格的测试用例,无需修改unittest用例的任何代码。  unittest:…

【Linux】分区向左扩容的方法

@目录为什么是向左扩容操作前的备份方法:启动盘试用Ubuntu后进行操作为什么是向左扩容 Linux向右扩容非常简单,无论是系统自带的disks工具还是apt安装的gparted工具,都有图像化的界面可以操作。但是,都不支持向左扩容。笔者这里的磁盘情况如下:其中磁盘1的99.5GB是我的Lin…

linux开机自启脚本运行完之后不关闭应用程序

最近在用petalinux2323.2版本编译的系统镜像,想在系统开机后自动运行程序,发现按照2021.2相同的方式启动之后,软件在开机脚本运行完就会自动退出了,经过查找发现petalinux2023.2编译的镜像默认使用的systemd去运行开机脚本,而2021.2是使用的init.d。在systemd方式下需要在…

读懂财务报表:解密资产负债率与净资产收益率

一、概述 财务报表中隐藏着大量的信息,如果我们在解读时缺乏系统的思路或忽略了关键指标,就很容易被庞杂的数据搞得不知所措。本文将从几个重要指标出发,包括资产负债率、净资产收益率和销售复合增长率的计算与分析,帮助大家更精准地理解财务报表。二、财务报表的重点 首先…

陶瓷基板

【附在每个笔记前面:个人学习记录,如有错误,烦请指正,不胜感激。】一、组成:基片+膜层(基于行业局限性,暂时只看金属化薄膜基板,厚膜下次找机会再学习下) ① 基片材质: 氧化铝、氮化铝、碳化硅、金刚石 受制于成形工艺:即烧型、研磨型、抛光型在公差、表面粗糙…

人工智能 | 结对编程助手GithubCopilot

简介 GitHub Copilot 是一款 AI 结对程序员,可帮助您更快、更少地编写代码。它从注释和代码中提取上下文,以立即建议单独的行和整个函数。GitHub Copilot 由 GitHub、OpenAI 和 Microsoft 开发的生成式 AI 模型提供支持。它可作为 Visual Studio Code、Visual Studio、Neovim…

iLogtail 开源两周年:感恩遇见,畅想未来

iLogtail 的诞生初衷非常朴素,那就是开发一款轻量、高性能、高可靠的可观测数据采集器。也是基于这样一个常见且迫切的需求,iLogtail 于 2013 年在阿里巴巴诞生。早在上世纪 60 年代,早期的计算机(例如 ENIAC 和 IBM 的大型机)在操作过程中会输出一些基本的状态信息和错误…

ant design vue 表格table 和复选框Checkbox结合 实现树形数据操作

前言:最近在做一个权限管理的页面,需要配置权限。业务给的要求在表格里,展示权限以及编辑权限。然后根据权限数组,动态展示模块。 页面需求:可以设定每个公司或者部门的单独权限,可以编辑保存权限 主要实现: 1.全选,反选(递归循环,every,some实现) 2.子级选中其父级…

TCP通信之经典问题解决

先看下面的代码,研究下执行后会出现什么? 服务端: from socket import * ip_port=(127.0.0.1,8003) buffer_size=1024sock_server=socket(AF_INET,SOCK_STREAM) sock_server.bind(ip_port) sock_server.listen(5)while True:print(服务端建立连接...)conn,addr=sock_server.…

看看人家那后端 API 接口写的,那叫一个优雅!

文章来源:https://www.toutiao.com/article/6694404645827117572 在移动互联网,分布式、微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式,(题外话:前后端的工作职责越来越明确,现在的前端都称之为大前端,技术栈以及生态圈都已经非常成熟;以前后…

用一段时间后 QT creator 打开容易卡死

以下为Win11环境 1.win+E打开文件夹,显示隐藏项目 2.找到如下路径的 C:\Users\你的电脑名\AppData\Roaming\QtProject 删除其中文件 3.纵享丝滑

MongoDB系列之一文总结索引

概述 分类 索引的分类:按照索引包含的字段数量,可分为单键索引(单字段索引)和组合索引(联合索引、复合索引) 按照索引字段的类型,可以分为主键索引和非主键索引 按照索引节点与物理记录的对应方式来分,可以分为聚簇索引和非聚簇索引,其中聚簇索引是指索引节点上直接包…