腾飞计划寒假第一课——树上倍增 2025/2/2

· · 个人记录

P4155 [SCOI2015] 国旗计划

因为没有包含,所以左端点靠右的右端点一定靠右。把环断开,复制一份在后面,问题是选多少个区间能覆盖 ii+n。每次选区间能覆盖到的左端点最靠右的。

CF208E Blood Cousins

维护一棵树,每次查询一个子树中深度为 x 的点有多少个。

用 dfs 序搞一个数组下来,数组中 a_i 的值表示 dfs 序为 i 的点的深度。

转换成给你一个序列,求这个序列中等于 x 的有多少个。

P1600 [NOIP 2016 提高组] 天天爱跑步

x_ij 子树中的一点,ti 开始走的时间,dep 是深度。

f_i=t_i+dep_{x_i}

查询有多少 f_i=w_i+dep_jw_i 是题目中给出的。

P7562

没听懂 qwq。

P5024 [NOIP 2018 提高组] 保卫王国

f_{i,0/1} 表示 i 的子树选完了,i 选不选的答案。

整颗树的 dp 信息减去 i 的 dp 信息得到剩下的 g_{i,0/1} 表示 i 子树外的最小代价。

如果 xy 是祖先关系,每次询问答案是 f_{x,a}+g_{y,b}+ans_ians_i 表示 xy 的最小代价。

ans_i 的方法:倍增数组 F_{i,j,0/1,0/1} 表示从点 i2^j 步,起点和终点选或不选的方案。

如果 xy 不是祖先关系找 LCA 跑两遍就是了。