做题记录 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)\)

代码

参考

posted @ 2026-04-06 07:30  Hstry  阅读(1)  评论(0)    收藏  举报