摘要: 线段树合并 实现 每次递归到叶子节点合并。 线段树合并 单次时间复杂度 \(O(n \log n)\)。 证明:每次递归会让区间长度减半,所以最多会递归 \(O(\log n)\) 层,而区间长度为 \(n\),所以叶子节点有\(n\) 个,所以最多合并 \(O(n\log n)\) 次。 因为如果 阅读全文
posted @ 2025-05-31 19:51 GuoSN0410 阅读(39) 评论(0) 推荐(0)
摘要: 思路 树形 DP 很好注意到这是一道树形 DP 题目。 可以很好想到设 \(f_{i,j}\) 表示当前结点 \(i\) 的权值为 \(j\) 时的方案数。 转移方程:\(f_{i,j}=\sum f_{v, k} * [ok_{i,j}=1]\) 但是这么做为什么是错的呢?因为每种权值有一个数量限 阅读全文
posted @ 2025-05-28 17:04 GuoSN0410 阅读(16) 评论(0) 推荐(0)
摘要: 简介 虚树就是一种很无奈时的无赖做法 --唐末 当题目中答案只与某些关键点有关,而关键点很稀疏时,就可以用虚树将整棵树浓缩。 建虚树 方法一: 二次排序 + LCA 连边 将所有关键点按 dfn 序排序,求出相邻两个点的 LCA(确定虚树中的所有点)。 将所有 LCA 及关键点去重并再次按 dfn 阅读全文
posted @ 2025-05-26 19:54 GuoSN0410 阅读(20) 评论(0) 推荐(0)
摘要: Hdu 6843 cf181f qoj8704 p124642 阅读全文
posted @ 2025-05-26 16:18 GuoSN0410 阅读(7) 评论(0) 推荐(0)
摘要: 思路 首先注意到一个性质: 选出来的最优路径一定在直径上 证明:我不会,大概理解一下吧。QWQ 考虑如何计算最大距离: 对于在直径上,且不在枢纽上的点: 它的距离就是他与枢纽一个端点距离(大概理解一下)。 对于不在直径上,且与直径交点不在所选路径上的: 不会对最大距离产生贡献。 对于不在直径上,且与 阅读全文
posted @ 2025-05-22 15:18 GuoSN0410 阅读(12) 评论(0) 推荐(0)
摘要: 思路 首先对于 \(k=1\) 的情况: 可以发现在树的直径两端连一条边,一定是最优的。设直径长度为 \(L\),总共有 \(n\) 个点,易得新的花费为 \(2*(n-1)-L+1\),可以理解为用 \(1\) 条边代替了 \(L\) 条边。 再看 \(k=2\) 的情况: 可以仿照第一种情况,在 阅读全文
posted @ 2025-05-20 22:33 GuoSN0410 阅读(27) 评论(0) 推荐(0)
摘要: 思路 首先注意到一个非常难注意到的性质: 将所有有异象石的点按时间戳进行排序,算出每个 \(a_i,a_{i+1}\) 在树上的最短路径和 \(a_n,a_1\) 在树上的最短路径的和,这个和就是第三种询问答案的二倍。 维护一个 set。 若加入 x 号点,它在 set 中左边的点是 l,右边是 r 阅读全文
posted @ 2025-05-20 14:24 GuoSN0410 阅读(11) 评论(0) 推荐(0)
摘要: 思路 考虑一条路径会对哪些观察员产生贡献。 设一条路径 x->lca(x,y)->y, 若他会对观察员 u 产生贡献,则: u 位于 x->lca(x,y) 的路径上; u 位于 lca(x,y)->y 的路径上。 对于第一种情况(\(d_u\) 表示根节点到 u 的距离),可以推出此时 \(w_u 阅读全文
posted @ 2025-05-15 15:10 GuoSN0410 阅读(18) 评论(0) 推荐(0)
摘要: 思路 树剖板子 题目中要实现两种操作: 给一个点打上 1 的标记; 找他第一个打上标记 1 的祖先。 考虑第一种操作怎么做,十分简单,直接把一个点的标记修改为 1 就可以,简单明了。 对于第二种操作,可以用树剖将树剖成一条条链,然后开一棵线段树,每次查询区间中编号最大的标记为 1 的点。 真是水题 阅读全文
posted @ 2025-05-13 22:32 GuoSN0410 阅读(10) 评论(0) 推荐(0)
摘要: 思路 对于 \(u, v\) 路径上的最大利润有三种情况: \(u->lca(u,v)\) 上买卖; \(lca(u,v)->v\) 上买卖; 跨过 \(lca(u,v)\) 进行买卖; 我们可以用树上倍增进行维护。设 up 数组维护第一种买卖,down 数组维护第二种买卖,maxx 维护路径最大值 阅读全文
posted @ 2025-05-13 14:39 GuoSN0410 阅读(14) 评论(0) 推荐(0)