- 2024-11-11虚树
建立虚树先把关键点按\(dfn\)升序排序,单调栈维护树上一条链(\(dfn\)单增),初始为根节点\(1\)逐个考虑关键点\(x\):设\(lca=LCA(x,st[top])\),分类讨论:\(\hspace{0.5cm}\)①若\(lca=st[top]\),表明\(x\)和\(st[]\)同一条链上,直接入栈;\(\hspace{0.5cm}\)②若\(lca\not=st[top]\),则\(l
- 2024-10-27CSP-S 2024 游记
CSP-S2024游记本文内容按照时间顺序,前半纪实,后半精神。我在炼石做梦熊炼石计划的NOIP模拟赛,感觉前一两道还能做得出来,后面的就比较难想了。见识到了很多厉害的trick。没有什么领域的题是看到第一眼就能做出来的。组合数学的题有的时候依赖OEIS,争取以后改掉这个坏习惯。
- 2024-09-26虚树 学习笔记
虚树VirtualTree学习笔记引入P2495[SDOI2011]消耗战题目大意:给一棵\(n\)个点的树,\(m\)次询问\(k\)个点,要求切断一些边使点1不可达这些点,求最小切断的边权和。\(n\le2.5*10^5,m\le5*10^5,\sumk\le5*10^5\)先考虑一个朴素的DP,每次询问扫一遍整个树。设\(f_
- 2024-09-11虚树
用以解决树上的和点集相关的问题,将树的大小缩减至\(\mathcal{O}(|S|)\)级别。构建方法即将所有关键点按照\(\rmdfs\)序排序,然后再将\(LCA(s_i,s_{i+1})\)加入并去重,时间复杂度\(\mathcal{O}(n\logn)\)。有线性构建的单调栈方法,没学。粘个代码for(inti=1;i<=k;i++)
- 2024-09-10虚树+树形dp
虚树实际上是一颗浓缩子树;使用虚树的题目大部分具有查询的点有限,同时虚树构建的信息符合规则;做虚树的题目:步骤为先想出原树的暴力求解做法,然后构建虚树同时向其中添加有用信息(比如边权);虚树的构建过程:虚树的构建大致有两种,但是两种方式都与dfs序有关;首先解释为什么与dfs序有
- 2024-09-09虚树
消耗战首先考虑朴素\(dp\),设\(f_u\)表示使\(u\)的子树内的所有关键点都不与\(u\)连通的最小代价。如果当前在\(u\),\(j\)这个儿子是关键点,那么有转移\(f_u\leftarrowf_u+val_{u\rightarrowj}\);否则有转移\(f_u\leftarrowf_u+\min(f_j,val_{u\rightarrowj})\)。这
- 2024-08-21[JOISC 2023 Day3] Tourism 题解
大家好,我喜欢珂朵莉树,所以我用珂朵莉树\(AC\)了本题。实际上,我们比较容易发现,这题实际上就是求\([l,r]\)中的所有点作为关键点时,虚树所压缩的所有点(实际上就是显现出来的点+在虚边上的点)。那么我们容易发现,一个点\(x\)作为虚树所压缩的所有点的充要条件为:\(x\)是至少
- 2024-08-18虚树总结
之前学了一些算法,没有写算法总结,未来会陆续补一些。前置知识:树形\(dp\),\(lca\),\(dfs\)序。我们考虑\([HEOI2014]\)大工程这道题。显而易见,假如这道题只有一次询问,我们可以直接树形\(dp\),快速求出答案,时间复杂度\(O(n)\)。但是,梦想是梦想,现实是现实,这题多组询问,假如一
- 2024-08-11虚树
引入$\color{skyblue}P2495[SDOI2011]消耗战$题意给定一颗$n$个节点的树,每条边有边权。有$m$次询问,每次询问钦定$k$个特殊节点,问使得节点$1$不与任何特殊节点相连通所需要删除的最小总边权是多少。数据范围:对于\(100\%\)的数据,\(2\leqn\leq2.5\ti
- 2024-08-09虚树
虚树VirtualTree浓缩信息,把一整颗大树浓缩成一颗小树。下图中,红色结点是我们选择的关键点。红色和黑色结点都是虚树中的点。黑色的边是虚树中的边。OIWIKI两种建树方式1.第一种构造过程:二次排序+LCA连边(容易理解,常数略大)boolcmp(intx,inty){returndfn[x
- 2024-08-09关于虚树
关于虚树瞎扯某些树上问题,给了巨多节点,而实际上它们之中只有小部分能做出贡献,其余都是些水军,为杀尽OIers的脑细胞做出努力考虑重新种一棵树,浓缩信息,简化节点个数,于是产生了虚树。大概是长这个样子:红色结点是我们选择的关键点,即能够做出贡献的点。红色和黑色结点都是虚树中
- 2024-07-30虚树【学习笔记】
为什么要用虚树?例题在某些树上问题中,对于某次询问,我们并不需要用到全部的树上的点:例如,例题中:总点数\(n\le2.5\times10^5\)询问次数\(m\le5\times10^5\)询问的点数\(\sumk_i\le5\times10^5\)我们可以发现其实每次询问均摊下来的询问点数k并不多,但如果每次询问都
- 2024-07-28CF526G Spiders Evil Plan 题解
Description给定一棵\(n\)个节点的无根树,每条边有边权。有\(q\)次询问,每次询问给出\(x,y\),你需要选择\(y\)条树上的路径,使这些路径形成一个包含\(x\)的连通块,且连通块中包含的边权和最大。\(n,q\le10^5\),强制在线。Solution考虑只有一组询问怎么快速求答案。容
- 2024-07-15虚树复习 & O(1) 查询 LCA
放假是不可能做题的。那就写总结把。虚树问题的情境涉及多次树上询问,每次指定一些点,让你计算。此类问题需要我们在线地找到尽可能少的【关键点】进行计算,最好和给的点级别一样。虚树的思想就是这个过程。二次排序一个关键直觉:【指定点】两两的LCA一定是【关键点】。并且
- 2024-07-12NOIP DP
NOIPDP本章选用题目重做的方法进行复习会选择有价值的题目重做1.数位DPP2602数字计数Trick典型转换:前缀和转换通过从高到第枚举数字的方法进行统计。这是很常见的限制数字范围的方法。P4127同态分布所以数位DP开始推导的时候通常是从暴力开始的,开始的时候就是枚举
- 2024-07-02从 dfs 序求 lca 到虚树到树分块 学习笔记
前言想象我在口胡三样我都不熟悉的东西并尝试称之为“学习笔记”。其实不过是我自己对于它的一点小理解,甚至可能是错误的!无所谓,口胡!口胡!口胡!口胡!口胡!一些备注\(dfn_u\)为点\(u\)的dfn序,\(nfd_i\)表示第\(i\)个dfs到的点是啥(前者的反数组)dfs序求lca这个很简单,想
- 2024-06-23虚树初步学习笔记
虚树给定一棵树,树上有一些关键点,你要建另一棵树,保留关键点,以及任意一对关键点的\(\text{LCA}\)。当你发现对于一棵树,你只有一些关键点有用的时候,就可以尝试建虚树。两次排序思路先把所有点按\(\text{dfn}\)序排序,然后把\(\text{dfn}\)相邻的两个点取出来,再把它们的\(\t
- 2024-06-11虚树
虚树什么是虚树虚树常常被用在树形\(dp\)中。当一次询问仅仅涉及到整棵树中少量节点时为每次询问都对整棵树进行\(dp\)在时间上是不可接受的。此时,我们建立一棵仅仅包含部分关键节点的虚树,将非关键节点构成的链简化成边或是剪去,在虚树上进行\(dp\)。虚树包含所有的询问点及它们
- 2024-05-12虚树
虚树简介虚树一般用于树形DP中,可以有效减少冗余的计算量。其原理是将对DP无影响,或者在影响可快速运算范围内的点缩在一起,从而使得整棵树大小极大的减小。因此,可以使用虚树的题目一般有特殊点之类的设定,多测并限定特殊点的总量。P2495[SDOI2011]消耗战一道经典的虚
- 2024-05-08trick:动态维护虚树大小
对dfn序开数据结构(如线段树),每个结点\(p\)维护对应dfn序区间内所有存在的点所构成的虚树大小\(sz_p\),需要维护区间内所有存在的点中dfn序最大点\(rv_p\)和最小点\(lv_p\)、区间内所有存在点的LCA\(lca_p\).考虑合并左右儿子\(ls,rs\),按两棵虚树是否相交分讨,先考虑
- 2024-04-14虚树#1
基环树那块闲了再写。本文针对虚树板题作原理解释和介绍写法。消耗战如果不考虑多测那么这是一道裸的树形dp。令\(dp_u\)表示切断以\(u\)为根的子树里所有关键点的最小花费。\[ans=dp_{root}=dp_1\]\[dp_u=min(minv_u,\sum_{v\inson_u}dp_v)\]其中\(minv_u\)表示切
- 2024-04-14虚树
1引入首先看这样一道题:[SDOI2011]消耗战有一棵树,边上有边权。每次询问给出\(k\)个点,找到一些边,使得删去这些边后从\(1\)号节点无法达到这\(k\)个点中任意一个,同时使边权最小。显然这是一道树形dp。如果说只给我们一次询问,可以很简单的\(O(n)\)求出。但是现在有了
- 2024-04-12[DS 小计] 虚树
概念什么是虚树?通俗的来说,虚树是原树的一些点集组成的树,这些点是一些关键点。在树形dp遍历中,如果每次都遍历整棵树会很浪费时间,这时候虚树就派上用场了。简介虚树的节点有哪些?在dp中,我们建立虚树包含着关键节点和关键节点的任意二者的\(\text{lca}\)。到这里,你已经会
- 2024-04-08虚树学习笔记
关于虚树对于一些在树上进行某些询问的查询,且每个询问实际用到的点并不多的时候,可以考虑建虚树来查询。虚树的建立复杂度是\(O(m\logn)\)的,\(m\)是虚树节点数量,\(n\)是原树节点数量。也有方法可以做到\(O(m\logm)\)。例题题目链接。分析注意到范围:\(\sumk_i\le5
- 2024-04-06虚树学习笔记
1.简介虚树,顾名思义1,就是不真实的树,常用于动态规划,所以可以说,虚树就是为了解决一类动态规划问题而诞生的当一次询问中仅涉及一颗树中的少量节点时,在整棵树上dp时间复杂度显然难以接受所以可以建立一颗只包含关键节点的树,将非关键的链简化或省略,在新树上进行dp一颗虚树包含所