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

洛谷 P10894

给定一棵大小为 \(n\) 的树,问能选出多少个非空的点集 \(S\),使得若 \(u, v \in S\),则 \(\text{LCA(u, v)} \in S\)

\(T\) 次查询,每次给定 \(u\),问假设删除 \(u\) 的子树后的答案是多少?

\(n, T \le 5 \times 10^5\)

先不考虑 \(T\) 组询问。这个很树形 DP,设 \(dp_u\) 表示对于 \(u\) 的子树,答案是多少。下面设 \(v \in son_u\)

  • 若不选 \(u\),只能从一个儿子继承:\(dp_v \rightarrow dp_u\)
  • 若选 \(u\),则每个子树都没有限制:\(\prod (dp_v + 1) \rightarrow dp_u\)\(+1\) 是加上空集。)

所以 \(dp_u = \sum dp_v + \prod(dp_v + 1)\)


考虑查询,实际只需要对于每个 \(u\) 都算出答案即可。具体地,算出 \(dp_u\) 对于答案(\(dp_1\))的贡献系数 \(f_u\) 即可。设 \(bro\)\(u\) 的兄弟

\[dp_{fa_u} = \sum\limits dp_{bro} + (\prod(dp_{bro} + 1) + 1)dp_{u} \]

根据这个,\(dp_u\)\(dp_{fa_u}\) 的贡献系数为 \((\prod(dp_{bro} + 1) + 1)\)\(dp_{fa_u}\) 对答案的贡献习俗为 \(f_{fa_u}\),所以 \(f_u = f_{fa_u}(\prod(dp_{bro} + 1) + 1)\)。搞个前后缀积即可。

查询的答案为 \(dp_1 - f_u \dot dp_u\)

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


其实设计出 \(dp_u\) 不难,主要是询问。因为是一个加乘的形式,可以想到求出每个 \(dp_u\) 对答案的贡献有多少,从 \(fa_u\) 递推即可。

http://www.gsyq.cn/news/40129.html

相关文章:

  • 服务器取证基本知识学习
  • 实用指南:【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)
  • 接口请求测试题目
  • iOS - 从 @property 开始
  • 使用涡流效应将伽马射线收集到一起的装置
  • ESP32 中断
  • Linux中读写自旋锁rwlock的实现 - 详解
  • 通过发射高能电子束来控制宇宙射线
  • 各种物质的在宇宙空间中的无线电频谱分析