Array Collapse

news/2024/12/23 21:00:06/文章来源:https://www.cnblogs.com/YzaCsp/p/18625018

前言

\(C\) 快魔怔了, 还是先来打这个

思路

方法 \(1\) : 笛卡尔树

看到这种类 \(\rm{RMQ}\) 问题直接一个笛卡尔树起手, 恰好 \(p\) 是不重的, 那么更方便了啊

搞出树树挖下性质

例如样例中的

4
2 4 1 3

pAX41V1.md.png

你注意到每次删除操作相当于选择一个键值段, 然后只保留这一段的根节点, 但是这样子做不够完善, 例如这样的一个数据

pAX4wqA.md.png

你删除键值段 \(1 \sim 4\) , 那么留下的根节点 \(2\) 和一个没被删除的 \(4\) 还需要继续处理?

这种情况下应当怎么办?

我们考虑树形 \(\rm{dp}\) , 令 \(f_u\) 表示 \(u\) 子树 (柚子厨) 中的序列可能性

容易发现对于上面这种情况, 我们只需要加上 \(4\) 子树的可能性即可

我们考虑形式化的表示这些问题

\(f_{u, 0 / 1}\) 表示对于 \(u\) 的子树, 其中是否保留 \(u\) 的可能性数量

那么有

\[\begin{cases} \begin{aligned} & f_{u, 1} \gets \sum_{k = 0}^{1} f_{ls, k} \cdot \sum_{k = 0}^{1} f_{rs, k}\\ & f_{u, 0} \gets \left[ \exists fa_r \right] \cdot \sum_{k = 0}^{1} f_{ls, k} + \left[ \exists fa_l \right] \cdot \sum_{k = 0}^{1} f_{rs, k} \end{aligned} \end{cases} \]

简化一下, 去掉 \(0, 1\)

\[\begin{cases} \begin{aligned} & f_{u} \gets f_{ls} \cdot f_{rs}\\ & f_{u} \gets \left[ \exists fa_r \right] \cdot f_{ls} + \left[ \exists fa_l \right] \cdot f_{rs} \end{aligned} \end{cases} \]

这种代码就不写了, 并不困难

方法 \(2\) : 朴素 \(\rm{dp}\)

这种方法应该好想一点

你发现一个可以通过操作 \([l, r]\) 来保留两端的点, 仅有这两种可能:

  • \(a_l\)\([l, r]\) 区间中最小值
  • \(a_r\)\([l, r]\) 区间中最小值

简单分讨即可, 具体见 Luogu 题解

总结

笛卡尔树上常见的树形 \(\rm{dp}\)

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

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

相关文章

禅道bug增加自定义字段

禅道版本 18.9 需求 给禅道的bug模块,增加自定义字段。目前主要增加“发现阶段”、“所属环境”、“出现频率” 增加bug的类型 在bug列表增加搜索:“发现阶段”、“所属环境”、“出现频率” 在测试报告增加模块:“发现阶段”、“所属环境”、“出现频率”禅道开发手册 http…

php网络编程tcp

服务端:<?php $server = new Swoole\Server(127.0.0.1, 9501);$server->set([worker_num => 8, // worker进程数 cpu1-4倍max_request => 10000, // 根据内存定义 https://wiki.swoole.com/#/server/setting// open_eof_check => true,// package_eof => &…

php网络编程swoole websocket

服务端:<?php use Swoole\WebSocket\Server;// 创建 HTTP 服务器 $server = new Server(127.0.0.1, 8888, SWOOLE_PROCESS, SWOOLE_SOCK_TCP);$server->on(start, function ($server) {//print_r($server);echo "Swoole websocket server is started at ws://127.…

php网络编程swoole udp

服务端:<?php $server = new Swoole\Server(127.0.0.1, 9504, SWOOLE_PROCESS, SWOOLE_SOCK_UDP);$server->on(start, function ($server) {echo "UDP Server is started at udp://127.0.0.1:9504\n"; });$server->on(packet, function ($server, $data, …

第36次ccf-csp题解(思维)

比赛链接 https://sim.csp.thusaac.com/contest/36/home比赛感受这会刚打完上海icpc,比起区域赛的题,这个简单太多了。 感受还不错,写的很顺手。除了第3题,其他3题都是一发过。 刷题得长期刷。 A题 移动题意:f : y+1 ;  b : y-1 ;   l : x-1 ;  r : x+1 一个简单的模…

php网络编程swoole http

服务端:<?php use Swoole\Http\Server; use Swoole\Http\Request; use Swoole\Http\Response;// 创建 HTTP 服务器 $server = new Server(127.0.0.1, 9501);$server->on(start, function ($server) {//print_r($server);echo "Swoole http server is started at h…

JVM简介—2.垃圾回收器和内存分配策略

大纲 1.垃圾回收概述 2.如何判断对象存活 3.各种引用介绍 4.垃圾收集的算法 5.垃圾收集器的设计 6.垃圾回收器列表 7.各种垃圾回收器详情 8.Stop The World现象 9.内存分配与回收策略 10.新生代不同配置演示 11.内存泄漏和内存溢出 12.JDK为提供的工具1.垃圾回收概述 2.如何判…

OpenAI 推出嵌入式硬件 SDK,支持 ESP32 语音开发;INFP:音频驱动的双人对话头像生成,自动区分说话者和倾听者

开发者朋友们大家好:这里是 「RTE 开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑…

8086汇编(16位汇编)学习笔记02.分段,机器码和寻址

原文链接:https://bpsend.net/thread-112-1-2.html 分段问题1 8086是16位cpu,最多可以访问(寻址)多大内存?运算器一次最多处理16位的数据。地址寄存器的最大宽度为16位。访问的最大内存为:216 = 64K 即 0000 - FFFF。问题2 8086允许最大内存1M,如何实现访问(寻址)到所…

AI对话机器人续:将AI Bot接入企业微信

之前尝试将Coze AI Bot接入到了微信,有朋友问如何接入企业微信,今天有空尝试了下,和你分享一下过程。整体流程和步骤还是基于chatgpt-on-wechat这个开源框架来的,唯一的差别就在于部署chatgpt-on-wechat的时候,需要填写一些企业微信相关的参数和secret。大家好,我是Ediso…

python网络编程之udp

服务端:import socketsk = socket.socket(type=socket.SOCK_DGRAM) # 表示一个udp协议 sk.bind((127.0.0.1, 9504))# 服务端不能先发送消息,因为服务端不知道客户端的ip while True:msg, addr = sk.recvfrom(1024)print(f"接收到客户端数据:{msg.decode(utf-8)}"…