首页 > 其他分享 >虚树

虚树

时间:2024-05-12 19:20:12浏览次数:19  
标签:需要 能源 保留 切断 虚树 DP

虚树

简介

虚树一般用于 树形DP 中,可以有效减少冗余的计算量。

其原理是将对 DP 无影响,或者在影响可快速运算范围内的点缩在一起,从而使得整棵树大小极大的减小。

因此,可以使用虚树的题目一般有 特殊点 之类的设定,多测并限定 特殊点 的总量。

P2495 [SDOI2011] 消耗战

一道经典的虚树题。

如果要考虑虚树,我们需要先考虑原树上是如何 DP 的。

DP

设 \(f(u)\) 表示切断 \(u\) 子树中所有能源所需要的代价。

记 \(v\) 表示 \(u\) 的儿子,\(w\) 为 \(u\) 到其父亲的边权。

若 \(u\) 有能源:

\[f(u) = w \]

直接切断 \(u\) 到父亲的桥梁。

若 \(u\) 无能源:

\[f(u) = \min\{w,\sum f(v)\} \]

虚树

接下来考虑有哪些点可以省去。

观察状态转移方程,能源点肯定需要保留,能源点两两之间的 LCA 也需要保留。

虚树-1

即如图若加粗的点为能源点,则 521,都需要保留。

标签:需要,能源,保留,切断,虚树,DP
From: https://www.cnblogs.com/DeepSeaSpray/p/18188072

相关文章

  • trick:动态维护虚树大小
    对dfn序开数据结构(如线段树),每个结点\(p\)维护对应dfn序区间内所有存在的点所构成的虚树大小\(sz_p\),需要维护区间内所有存在的点中dfn序最大点\(rv_p\)和最小点\(lv_p\)、区间内所有存在点的LCA\(lca_p\).考虑合并左右儿子\(ls,rs\),按两棵虚树是否相交分讨,先考虑......
  • 虚树#1
    基环树那块闲了再写。本文针对虚树板题作原理解释和介绍写法。消耗战如果不考虑多测那么这是一道裸的树形dp。令\(dp_u\)表示切断以\(u\)为根的子树里所有关键点的最小花费。\[ans=dp_{root}=dp_1\]\[dp_u=min(minv_u,\sum_{v\inson_u}dp_v)\]其中\(minv_u\)表示切......
  • 虚树
    1引入首先看这样一道题:[SDOI2011]消耗战有一棵树,边上有边权。每次询问给出\(k\)个点,找到一些边,使得删去这些边后从\(1\)号节点无法达到这\(k\)个点中任意一个,同时使边权最小。显然这是一道树形dp。如果说只给我们一次询问,可以很简单的\(O(n)\)求出。但是现在有了......
  • [DS 小计] 虚树
    概念什么是虚树?通俗的来说,虚树是原树的一些点集组成的树,这些点是一些关键点。在树形dp遍历中,如果每次都遍历整棵树会很浪费时间,这时候虚树就派上用场了。简介虚树的节点有哪些?在dp中,我们建立虚树包含着关键节点和关键节点的任意二者的\(\text{lca}\)。到这里,你已经会......
  • 虚树学习笔记
    关于虚树对于一些在树上进行某些询问的查询,且每个询问实际用到的点并不多的时候,可以考虑建虚树来查询。虚树的建立复杂度是\(O(m\logn)\)的,\(m\)是虚树节点数量,\(n\)是原树节点数量。也有方法可以做到\(O(m\logm)\)。例题题目链接。分析注意到范围:\(\sumk_i\le5......
  • 虚树学习笔记
    1.简介虚树,顾名思义1,就是不真实的树,常用于动态规划,所以可以说,虚树就是为了解决一类动态规划问题而诞生的当一次询问中仅涉及一颗树中的少量节点时,在整棵树上dp时间复杂度显然难以接受所以可以建立一颗只包含关键节点的树,将非关键的链简化或省略,在新树上进行dp一颗虚树包含所......
  • 虚树
    虚树用途一棵树上进行m次不同的操作,每次用到k个节点($\sumk$$O(n)级别$)用于于树上DP原理将原树里的一部分用到的节点抠出来,建一棵新树(虚树),在上面进行DP优点:降低每次操作的复杂度构建将要用到的节点(设为s)按照dfn序排序dfn序相近的在原树上......
  • 虚树学习笔记
    虚树学习笔记定义虚树指的是不同于原树(我称之为实树)的重构树,使得在同样能够求解的情况下,整棵树的节点数更少,从而使得在存在多次询问时,一些复杂度关于树的节点数的树上算法能够在时限内求解。常用场景一般来说,虚树的使用场景比较单一,常见于在实树上存在一些特殊节点,并且答案与......
  • Educational Codeforces Round 162 E 点分治 虚树 树形dp
    传送门给出\(n\le2\cdot10^5\)的一棵树,每个节点有一个颜色。求出路径长度为\(2\)路径首端和尾端拥有相同颜色,且路径上其他点不存在相同颜色的点的路径条数。当时看错题了,把颜色抽出来后没法做了。后来感觉能点分治,然后把题看对了,遂写了一个极其抽象的点分治。除此之外,把某......
  • 虚树
    虚树主要是针对这一类问题:答案只跟选定的某些点(及它们的lca)有关,且选定点的总量可以接受而每次询问都搜索一遍整棵树很浪费因此建出虚树,在虚树上进行各种操作构建有两种方法:二次排序求lca,单调栈单调栈单调栈上维护的是虚树的一条链第一步肯定是将点按照dfn序排序为了......