随笔分类 - 树论
摘要:II.II.CF741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths 名字真长 假如它没有”在每个子树中最长“的限制,我们倒真可以点分治,然后就是水题了;但是它要求在每个子树中最长,怎么办呢? 直接上dsu on tree就行
阅读全文
摘要:II.I.CF600E Lomsat gelral dot 的流程如下: 遍历轻儿子,更新轻儿子子树内答案。在更新完后,删除轻儿子子树内影响(即清空数组)。 遍历重儿子,更新重儿子子树内答案,但不删除。 将自身影响及轻儿子影响加入。 更新自身答案。 本题就照着这么做就行了。跑得还是比暴力线段树合并要
阅读全文
摘要:I.V.UOJ#284. 快乐游戏鸡 我们来思考一下你游戏的过程:每次找到一个最浅的 \(w_i\) 大于当前死亡次数的位置 \(i\),走到那儿;不断这样,直到下面两件事中有一件先发生: 你当前的死亡次数允许你一路走到终点。 你的死亡次数已经不小于 \(w_i\),需要寻找新的 \(i\)。 然后
阅读全文
摘要:I.IV.[WC2010]重建计划 咋感觉这篇博客里的题全可以用一些奇奇怪怪的方法水过去啊喂 首先,淀粉质+单调队列按秩合并的算法就不说了,有兴趣的可以参见本人的题解,如果能够证明或证伪该做法那更好。 现在考虑长链剖分的做法。 首先,其明显是0/1分数规划的场景,直接套上二分转判定性问题。 之后,我
阅读全文
摘要:I.III.CF1009F Dominant Indices 大约一年前,我曾用线段树合并硬刚过了这题,现在是正解。 可以设 \(f_{i,j}\) 表示 \(i\) 子树中深度为 \(j\) 的点的数量。于是直接长剖优化即可。时间复杂度 \(O(n)\)。 虽然因为我极其垃圾的实现导致还没有线段树
阅读全文
摘要:I.II.[POI2014]HOT-Hotels 加强版 易于发现,三点间两两距离相等,当且仅当两个LCA较深的点到它们的LCA距离相等,且第三个点到该LCA的距离与前两个点相同。 于是我们设 \(f_{x,i}\) 表示 \(x\) 子树中有多少对点,它们到LCA距离相同,且上述距离比该LCA到
阅读全文
摘要:I.I.【模板】树上 k 级祖先 当询问某个点 \(x\) 的 \(k\) 级祖先时,我们考虑找到其的 \(\text{highbit}(k)\) 级祖先 \(y\)(显然这个可以通过 \(O(n\log n)\) 预处理树上倍增得到)。之后,找到 \(y\) 所在长链的链顶。我们在链顶处预处理出其
阅读全文
摘要:II.[PKUWC2018]随机游走 无脑上minmax容斥。问题转换为求从起点 \(S\) 出发,到达集合 \(\mathbb S\) 中某一点的期望时间。 因为有环,考虑直接爆上高斯消元,时间复杂度 \(O(n^32^n)\)。 看上去不太能过?但是这份代码卡常卡得比较优美,加上又没有出菊花图卡
阅读全文
摘要:XI.[NOI2020] 超现实树 Observation 1.答案为 No 当且仅当有至少一棵深度为无限的树无法被生成。 这是显然的。 Observation 2.答案为 No 当且仅当存在至少一棵深度为 \(lim=\max\limits_{i=1}^m\operatorname{dep} T_
阅读全文
摘要:V.[USACO17DEC]Push a Box P 思想很简单,发现任意推动箱子的时刻牛总在箱子旁,而这总共是 \(4nm\) 种状态,可以建图储存,然后在上面搜索,搜出所有从起始状态可以到达的状态即可。我们需要连的边只有牛推了一格箱子的边(这个非常简单)以及牛不推箱子,从箱子的一方走到另一方的边
阅读全文
摘要:III.[SDOI2018]战略游戏 这题我居然能1A,神奇,神奇 本题是老缝合怪了,强行把一个圆方树板子跟一个虚树板子缝到了一起。不会虚树的可以参见笔者的虚树学习笔记。 具体来说,首先我们先建出圆方树出来;然后,再在圆方树上针对给定的点集跑出虚树出来;然后,对圆方树上的圆点数量做一个树上前缀和(本
阅读全文
摘要:VII.[HNOI/AHOI2018]毒瘤 题如其名 先说一下我的思路:跑出任一生成树,关于非树边的点集建虚树,然后在虚树上跑状压DP。非树边最多有 \(11\) 条,则非树边点集最大是 \(22\),则虚树大小最大 \(43\),因此状压DP复杂度是 \(43\times2^{43}\),显然不可
阅读全文
摘要:VI.LOJ#3077. 「2019 集训队互测 Day 4」绝目编诗 神题。 乍一看好像和虚树半毛钱关系都没有呀?没关系,过亿会就有了。 我们不妨先从暴力开始想起。 暴力怎么写?暴力怎么写?加边加边加边,搜就完事了。 没错,这里的暴力就是爆搜——搜出所有环来,然后判断是否有两个环长度相等即可。 但
阅读全文
摘要:V.CF639F Bear and Chemistry 大毒瘤题一道。 先边双缩点缩成森林,再对每组询问建出虚树,再连上边跑Tarjan求边双即可。 是不是很simple?但是相信我,码起来会让你发疯的 代码: #include<bits/stdc++.h> using namespace std;
阅读全文
摘要:IV.[HNOI2014]世界树 人傻常数大没错了,$n\log n$还会TLE 首先当然是建出虚树来。 然后,对于虚树中每个节点(不管是否是实点),我们可以DP出管辖它的那个节点,设为$f_x$。这个可以通过二次扫描与换根法在$O(k)$的时间内通过两次dfs求出,假如你使用ST表求LCA的话。这
阅读全文
摘要:III.[HEOI2014]大工程 仍然建出虚树。 我们考虑设$sz_x$表示$x$子树中实点(即原本点集中的点)的数量,再设$f_x$表示$x$到$x$子树中某个实点的最长路径,$g_x$则表示最短路径。 我们先考虑求$\min$和$\max$的部分。 对于一个实点,它初始值$f_x=g_x=0$
阅读全文
摘要:II.[SDOI2011]消耗战 老套路,我们建出虚树。 这题虚树中的边是带边权的,边权为原树中两点路径中权值的$\min$。这个权值的$\min$可以通过倍增求出。 在建出虚树后,我们就可以考虑DP了。设当前点为$x$,$f_x$为$x$同$x$子树中所有“资源丰富”节点切断的最小代价。 如果$x
阅读全文
摘要:I.CF613D Kingdom and its Cities 建虚树时有几个事是一定不能忘的: 记得将节点按照dfs序排序; 记得将根节点加入虚树; 该清空的一定都得清空。 这题我们就可以使用虚树解决。 首先,我们建出虚树,并给所有节点一个$sz$,其中只有点集中的节点的$sz$是$1$(因为虚树
阅读全文
摘要:虚树,是一种针对树上点集的强力运算。它可以在$O(k\log k)$(其中$k$是点集大小)的时间内,建出一棵包含点集中所有节点,以及其中某些点的lca的树出来。这棵树就被称作虚树。之后就可以在虚树上进行操作了,例如树形DP等。 建出虚树的操作主要是这样的: 我们维护一个栈,从栈顶到栈底构成原树上一
阅读全文
摘要:III.II.[SDOI2016]游戏 明显,一条从 \(x\) 到 \(y\) 的路径可以被拆作两条从LCA下来的路径,并且路径上每个点被写上的数是关于其深度的一次函数。 于是就树剖套李超树就行了。 但是有个问题,李超树不是只支持单点询问吗,怎么这里又支持区间了呢? 我们发现,对于一条线段,其与我
阅读全文

浙公网安备 33010602011771号