当前位置: 首页 > news >正文

洛谷 P4577

题面太屎了。

给定一棵大小为 \(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.gsyq.cn/news/40145.html

相关文章:

  • [linux-mint] Surface Pro4 安装linux驱动
  • [B] AGC VP 记录
  • 2025年河南工业大学2025新生周赛(2)
  • Reflections on Trusting Trust by Ken Thompson
  • [Agent] ACE(Agentic Context Engineering)源码阅读笔记---(1)基础模块
  • 顺序结构及选择结构
  • 洛谷 P10894
  • 服务器取证基本知识学习
  • 实用指南:【18】C实战篇——C语言 文件读写【fputc、fgetc、fputs、fgets】
  • L09_ java内注解反射的简单理解(作为小白,菜鸟的理解)
  • 20232323 2024-2025-1《网络与系统攻防技术》实验4实验报告
  • 直播带货话术不会写?这个AI指令帮你搞定
  • Java数组——数组的使用
  • NOIP2025加训
  • 20232427 2025-2026-1 《网络与系统攻防技术》实验四实验报告
  • Windows 系统下通过 VMware 17 安装 macOS 的教程
  • 2025.11.4 - A
  • 移动通信基站
  • kaggle提交 名字不是submission.csv的提交方法
  • NOIP2025 游记
  • 【学习笔记】kafka权威指南——第3章 kafka生产者—向kafka写入资料
  • 软工团队第一次作业
  • VS 2017 项目文件不完整,缺少预期导入
  • 人性的弱点
  • 机器学习基础入门(第四篇):无监督学习与聚类途径
  • 程序员必逛的9个开发者社区推荐
  • CleanMyMac X 4.14.2 dmg 安装教程|Mac 清理软件详细安装步骤
  • 某大厂跳动面试:计算机网络相关问题解析与总结 - 教程
  • AI元人文:悟空机制与反思——论智能文明的自我超越之道
  • 实用指南:Python 运算符与列表(list)