做题记录 26.4.5
\(\textcolor{purple}\odot\) P3647 [APIO2014] 连珠线
显然固定根后可以选择若干长度为 \(2\) 的直链
令 \(f_{u,0/1,0/1}\) 表示子树 \(u\) 中,是否已经选择根,是否需要一条从 \(u\) 向外的边的最大权值
容易做到 \(O(n)\)
\(\textcolor{purple}\odot\) P3523 [POI 2011] DYN-Dynamite
二分答案,然后贪心判断即可,时间复杂度 \(O(n\log n)\)
\(\textcolor{purple}\odot\) P3576 [POI 2014] MRO-Ant colony
容易求出每个点到目标边的总除数,从而转化为对于每个叶子的除数,求出给定值中商为 \(k\) 的数量
容易做到 \(O(n\log n)\)
\(\textcolor{purple}\odot\) P4099 [HEOI2013] SAO
容斥,强制固定一部分父亲大于儿子的约束为父亲小于儿子,忽略剩余此类约束,则约束关系构成若干连通块,容易求出这样一种划分的填数方式,系数为 \((-1)^p\),其中 \(p\) 为固定不合法的数量
容易做到 \(O(n^2)\)
\(\textcolor{purple}\odot\) P4253 [SCOI2015] 小凸玩密室
显然顺序为以某个点为根的 \(\text{dfs}\) 序
令 \(f_{u,0/1,w}\) 表示子树 \(u\) 中根是否在子树内,下一个点的权值为 \(w\) 的答案
显然 \(w\) 只能取 \(u\) 的祖先或祖先的兄弟,共 \(O(\log n)\) 种,从而时间复杂度 \(O(n\log n)\)
需要注意空间常数
\(\textcolor{black}\odot\) P4242 树上的毒瘤
一条路径的颜色数可以拆分为 \(O(1)\) 个查询到根的直链的颜色数,用树剖维护每个点到根的颜色数
对于一次查询,建立虚树,在 \(\text{lca}\) 处统计即可
时间复杂度 \(O(n+(q+\sum m)\log^2 n)\)
\(\textcolor{black}\odot\) P8258 [CTS2022] 独立集问题
若一个点已经被操作一次,则再操作一次其贡献取反,从而可以将总和的绝对值计入答案(一定可以根据之后的操作决定目前是否需要一次取反,使得最终计入答案的符号为 \(+1\)),而 \(|x|=\max(x,-x)\)
令 \(f_{u,0/1},g_{u,0/1},h_{u,0/1}\) 分别表示当前结点并入父亲、并入自身、并入儿子,系数为 \(+1/-1\) 时的最大贡献
容易做到 \(O(n)\)

浙公网安备 33010602011771号