洛谷 P4577

news/2025/11/4 22:14:59/文章来源:https://www.cnblogs.com/xhr0817-blog/p/19191540

题面太屎了。

给定一棵大小为 \(n\) 的树,每个节点有权值 \(a_i\),问最多能选出多少个节点,使得若 \(v \in subtree_u\),则 \(a_v \ge a_u\) 成立。

\(n \le 2 \times 10^5\)

这个问题丢到序列上就是 \(LIS\) 了,现在被放到了树上。

二分的做法不太好做,合并子树不好搞。考虑用树状数组/线段树优化的解法。

\(dp_{u, i}\) 表示 \(u\) 的子树内选出的集合中 \(a_{\min} = i\) 的答案。合并子树可以使用线段树合并。具体地, 若 \(u, v\) 合并,那么 \(dp_{v, j}(j \ge i)\) 是可以贡献到 \(dp_{u, i}\) 的,所以合并时要记录一个 \(pu, pv\) 分别表示一个子树对另一个子树的贡献,不能合并完再算贡献,也不能预先算好(因为不知道下面合并时用的是线段树 \(u\) 中的节点还是 \(v\) 中的)。可以看代码。

时间复杂度:\(O(n \log V)\)

思路还是比较自然,就是合并时容易搞错顺序。

写的时候一直尝试合并儿子前或者后再加上贡献,发现都有问题。只能把贡献下传下去算

void update(int x, int k) {if (x) tr[x] += k, tag[x] += k;
}int Merge(int u, int v, int l, int r, int pu, int pv) { // 区间 [l, r],合并 u, v。// 若 u, v 皆空显然是 0if (!u) {update(v, pv); return v;}if (!v) {update(u, pu); return u;}if (l == r) { // 叶子节点。tr[u] = max(pv, tr[u]) + max(pu, tr[v]); // max(pv, tr[u]) 表示 u 这边选择一个 [l, V] 的,另一边同理。最小值不是 u 也没关系,反正也会算到。return u;}int mid = (l + r) >> 1; Pushdown(u), Pushdown(v);son[u][0] = Merge(son[u][0], son[v][0], l, mid, max(pu, tr[son[v][1]]), max(pv, tr[son[u][1]])); // 更新 pu, pv。右边的可以向左边的贡献。son[u][1] = Merge(son[u][1], son[v][1], mid + 1, r, pu, pv);tr[u] = max(tr[son[u][0]], tr[son[u][1]]);return u;
}

似乎把状态设计成最小值 \(\ge i\) 更好搞些,但无所谓了。

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

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

相关文章

C++算法贪心例题讲解 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

AI元人文:理论框架、僵局本质与文明演化的系统性构想

AI元人文:理论框架、僵局本质与文明演化的系统性构想 一、核心命题与理论基石核心命题:从“价值对齐”到“价值权衡”的范式革命传统AI的“价值对齐”范式陷入三重困境:认知科学误区(沿用过时的信息处理模型)、方…

[linux-mint] Surface Pro4 安装linux驱动

Surface Pro4 这个被淘汰下来的机器,一直没想好要如何处理,因为有平板,所以也不想刷Android系统,最终决定还是安装linux,当一个办公小平板来使用,顺便练练linux环境软件使用,所以就选择系统,然后发现好多linux…

[B] AGC VP 记录

AtCoder Grand Contest 049 AT_agc049_e [AGC049E] Increment Decrement AtCoder Grand Contest 052 约 1h 切 A,之后都不会了。 A - Long Common Subsequence 先从左到右放 \(n\) 个 \(0\),\(n\) 个 \(1\)。发现 \(…

2025年河南工业大学2025新生周赛(2)

A 小唐的签到 小唐到达教室的时间等于路上所用时间和上楼时间之和,注意如果教室在n楼,只需要上n-1层。#include<bits/stdc++.h> using namespace std; int main() {int a, x, n, b, y;cin >> a >> …

Atcoder [ARC161C] Dyed by Majority (Odd Tree) 题解 [ 绿 ] [ 树的遍历 ] [ 构造 ] [ 贪心 ]

Dyed by Majority (Odd Tree) 想起来无聊,写起来恶心。 首先手模一下,发现叶子节点可以确定它父亲的颜色。这启示我们自底向上确定颜色。 因此考虑在已确定所有儿子的颜色时,确定自己的颜色,此时有两种情况:儿子中…

Reflections on Trusting Trust by Ken Thompson

来源:https://aeb.win.tue.nl/linux/hh/thompson/trust.htmlKen Thompsons "cc hack" - Presented in the journal, Communication of the ACM, Vol. 27, No. 8, August 1984, in a paper entitled "R…

[Agent] ACE(Agentic Context Engineering)源码阅读笔记---(1)基础模块

[Agent] ACE(Agentic Context Engineering)源码阅读笔记---(1)基础模块 目录[Agent] ACE(Agentic Context Engineering)源码阅读笔记---(1)基础模块0x00 概要0x01 示例1.1 建立简单Agent1.2 后续操作Load and …

AI大语言模型从0开发

Transformer Tokenization 考虑到计算机没有办法直接识别人类语言,我们将每一个词映射为一个token使得计算机可以直接识别。 为实现这个目的我们使用BPE算法将每个词划分为若干个前缀和后缀,以此拼起来一个词,节省v…

第三十三篇

今天是11月4号,钳工实训真难。累死了。

2025.11.4

今天学习了二叉树的树和森林的转换

25.11.4 动态规划dp

1.返回值和状态更新写法 特征 举例 返回值是否有意义① 记忆化递归(自顶向下) 用返回值表示状态 dfs(i) 返回从 i 出发的最大值 ✅ 非常重要② 递推(自底向上) 不返回值,只更新表 dp[i][j] = ... ❌ 一般返回 voi…

EAS_提供多个单据详情查询接口数据给第三方进行单据查看

EAS版本为8.2.本次由于停用流程助手,需要将在流程助手审批单据,提供给第三方进行审批,因此需要提供审批页面,单据的查看数据进行展示,本次需要提供的查询单据数量较多,为避免频繁编写查询语句,我们可以基于I9摘…

顺序结构及选择结构

顺序结构:程序按照代码书写的顺序一行一行执行 选择语句: if语句: if(表达式) { 语句1; } else if(表达式) { 语句2; } else { 语句3; } 表达式:如果表达式为真,则执行语句(0为假,非0为真)

洛谷 P10894

给定一棵大小为 \(n\) 的树,问能选出多少个非空的点集 \(S\),使得若 \(u, v \in S\),则 \(\text{LCA(u, v)} \in S\)。 \(T\) 次查询,每次给定 \(u\),问假设删除 \(u\) 的子树后的答案是多少? \(n, T \le 5 \tim…

基本的方法

定一移一 很多双变量情况,可以先固定一个,然后变化另一起,防止双变换带来的不确定,与时间上的复杂。 二分答案 这也是固定双变量问题的好方法,而时间复杂度只增加的一个 \(\operatorname O(\log n)\)。没事就想想…

2025.11.4模拟赛总结

爆零了嘻嘻嘻 赛场上一点思路没有纯罚座 T1构造,因为k下界是log,所以想到倍增构造,考虑把它构成一颗树的形式,发现因为相当于是像做了一个差分,所以可以到达与其奇偶性相同的点 当n为奇数时,根据步长和子环定理,…

备考笔记7

前面是下午大题有关ER图的内容,后面有一些其他的知识点,题目总结

服务器取证基本知识学习

1.kubectl是 Kubernetes的命令行工具,用于与 Kubernetes 集群进行交互。 2.集群:集群 = 多台服务器 + 统一调度 + 统一入口 + 共享状态,对外提供“永不掉线、随时扩容”的服务 3.关于k8s Kubernetes(K8s)的部署方…