首页 > 其他分享 >虚树 学习笔记

虚树 学习笔记

时间:2023-10-06 22:25:47浏览次数:50  
标签:sz le 询问 笔记 节点 学习 times 虚树

2023/10/6 发现找不到题做了,决定学习新算法。经过在一些题单中的翻找,决定学习虚树。


Part1. 引入

以一道例题来引入虚树吧。

[HEOI2014] 大工程

给定一棵有 \(n\) 个点的树,边权均为 \(1\)。
现在有 \(q\) 次询问。每次询问取 \(k\) 个点出来建立完全图。定义连接两个点的代价为在树上 \(a, b\) 的最短路径的长度。求:

  1. 建立完全图的代价和。
  2. 代价最小的边的代价。
  3. 代价最大的边的代价。
    对于 \(100\%\) 的数据,\(1\le n\le 10^6,1\le q\le 5\times 10^4,\sum k\le 2\times n\)。

以第一问为例。考虑树形 dp。设 \(sz_i\) 为以 \(i\) 为根的子树中被标记的点的个数,\(g_i\) 为以 \(i\) 为根的子树中所有被标记的节点到根节点的距离和。

将子树合并,考虑每条边的贡献即可,两个子树合并时的贡献和状态转移方程为:

\[ans \leftarrow ans + (g_u + sz_u) \times sz_v + g_v \times sz_u \]

\[g_u = g_u + g_v + sz_v \]

\[sz_u = sz_v + sz_u \]

但是对于每次询问都要遍历整棵树,单词询问是 \(O(n)\) 的,不可接受。

那么有什么办法解决呢?我们发现有 \(\sum k\le 2\times n\),那么是否可以将每次询问的时间复杂度压缩到仅与 \(k\) 有关呢?

显然是有的,虚树可以方便的解决「多次询问,每次询问给定一个特殊点集,求在这一点集上某一问题的答案」这样的问题。

Part2. 虚树的概念

我们发现在上面的树形 dp 中,有很多点其实没什么作用。具体而言,我们可以只保留点集中的点和点集中的点的 lca,而其它的点和边可以忽视,为新树分配边权为原树两点的距离。

借一下 OI-Wiki 的图捏。

如图所示,点集为 \({4, 6, 7}\)。我们不关心 \(2\) 号节点和 \(5\) 号节点,因为它们与点集无关,然后令 \((1, 4)\) 边的边权为 \(2\)。

而另一边,为了保留 \(6, 7\) 节点的信息,我们还需要保存它们的 lca 节点 \(3\) 的信息,以及这些点的共同 lca 节点 \(1\) 的信息。

虚树大概就是这个样子,然后我们发现在虚树上压缩边权进行如上树形 DP,还能得到正确答案,因为 保存着信息的重要节点 都被保留了,而虚树的点数被压缩到了 \(O(k)\) 级别的。

剩下的明天补了。

标签:sz,le,询问,笔记,节点,学习,times,虚树
From: https://www.cnblogs.com/AzusidNya/p/17745184.html

相关文章

  • 2023-2024-1 20231409佟伟铭 《计算机基础与程序设计》第一周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(2023-2024-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2023-2024-1计算机基础与程序设计第一周作业这个作业的目标<计算机基础与程序设计中的问题>作业正文https://www.cnblogs.com/twma......
  • 国庆笔记
    1、 快的保护慢的:比如使用guava保护redis,使用redis保护mysql。人多力量大(集群):一个Mysql不行,就分库分表;一个redis不行,就redis集群;主不行,从可以帮忙扛读流量;尽可能懒:能一会做,就别现在做,能异步就别同步;比如读集群通过异步推送数据,能接受一定时延,就不同步。 https://ju......
  • RK3588开发笔记(一):基于方案商提供的宿主机交叉编译Qt5.12.10
    前言  rk3588开发车机,方案上提供的宿主机只是编译rksdk的版本,并未编译好Qt,那么需要自行交叉编译Qt系统。选择的Qt的版本为5.12.10。 宿主机准备  下载并打开宿主机,只有sdk,并没有交叉编译的Qt。   Qt准备  下载Qt5.12.10的开源软件(方案商提供)。  ......
  • openGauss学习笔记-91 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-M
    openGauss学习笔记-91openGauss数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用MOT外部支持工具为了支持MOT,修改了以下外部openGauss工具。请确保使用的工具是最新版本。下面将介绍与MOT相关的用法。有关这些工具及其使用方法的完整说明,请参阅《工具与命令参考》。91......
  • U9C学习笔记
    建立物料清单BOM时,必须钩选“主批量“,否则建好之后重新再打开窗体,建好的树型BOM会断层。建立完之后,必须每一层物料都全部审核,否则MPS计算时无法展开多阶物料。  MPS计算完成之后,在”计划者工作台“可以查看到”结束净算“,说明已计算完成。 MPS计算时查看错误日志。......
  • 2023-2024-1学号20231407陈原《计算机基础与程序设计》第一周学习总结
    这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求是什么2023-2024-1计算机基础与程序设计第一周作业这个作业的目的是什么简单浏览《计算机概论》,提出疑问,并尝试解决问题    作业正文 https://www.cnblogs.com/CCCY12345/p/17744827.ht......
  • 2023-2024-1 20231428《计算机基础与程序设计》第一周学习总结
           这个作业属于哪个课程2023-2024-1-计算机基础与程序设计            作业要求https://www.cnblogs.com/rocedu/p/9577842.html#WEEK01          这个作业的目标快速阅读教材,初步了解所学内容 ......
  • 学习率
     学习率(LearningRate)是深度学习模型训练过程中的一个重要超参数。它决定了在每一次参数更新(迭代)中,模型权重(参数)应该更新的幅度大小。学习率是一个正数,通常表示为η(eta)或lr(learningrate) 学习率的作用和影响:控制参数更新步长:学习率决定了每次参数更新时,权重应该沿着梯度......
  • 软件设计开发笔记6:基于QT的Modbus RTU从站
      Modbus是一种常见的工业系统通讯协议。在我们的设计开发工作中经常使用到它。作为一种主从协议,在上一篇我们实现了MobusRTU主站工具,接下来这一篇中我们将简单实现一个基于QT的MobusRTU从站工具。1、概述  ModbusRTU从站应用很常见,有一些是通用的,有一些是专用的。而这里......
  • 学习笔记—— % 你 退 货
    最近对人类智慧比较感兴趣,于是学了一下这之中臭名昭著比较有名的%你退货模拟退火.看不懂的定义模拟退火算法来源于固体退火原理,是一种基于概率的算法,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个......