20241023 模拟赛
A. 浇水
考虑统计每个点被浇水了几次,容易用二维前缀和维护,最后如果这个点在对应颜色的矩阵里就扣除一个次数,最后有次数的就枯萎。
B. 藤养巴士
赛时考虑树形 dp,和树上差分解法殊途同归。
设 \(f_u\) 表示,假设所有目标在 \(u\) 子树中的人都已经到了 \(u\) 子树中,将这些人都送到对应位置,并且最后回到 \(u\) 的最短路径长度。转移时,考虑 \(u\) 到 \(v\) 这条边经过了几次。设 \(cnta_u,cntb_u\) 分别表示 \(u\) 子树中有几个 \(a\) 和几个 \(b\),那么如果 \(cntb_v\ne0\),说明这条边至少要走一次。容易发现需要经过这条边的人数为 \(cntb_v-cnta_v\),表示目前在 \(u\) 子树中的目标为子树 \(v\) 的人数减去当前在子树 \(v\) 中的人数,也就是当前在点 \(u\) 的,目标为 \(v\) 子树的人数。考虑一趟巴士需要一个来回,那么经过这条边的次数就为 \(\max\{1,2\times\lceil \cfrac{cntb_v-cnta_v}{l}\rceil\}\)。
直接求出 \(f_1\) 即可。最后注意到其实跑完最后一趟是不用回到根节点的,所以再减去离根最远的 \(b_i\) 与根的距离即可。
破防破防,这几天每次模拟赛都要挂好多分,今天甚至挂了 100pts,怎么办啊?
标签:子树,cntb,cnta,这条,20241023,模拟 From: https://www.cnblogs.com/luyuyang/p/18535178