Loading

5.30 考后总结

时间安排

7:10--7:30 读题。
7:30--8:30 T1,感觉是插头 dp ,不过数据范围有点大,除了插头不太能知道还能咋写了,感觉可以状压不过还不如插头。于是开始写,测一下极端数据,跑了 48 秒乐死我了。没啥可卡的。
8:30--10:00 T2,前面 30 分都可以直接 dp 。把 D 乘个 2 那么问题变成每个点要么不动要么右移 D ,问题是我不知道移动后前后区间是个什么状态。没啥想法先把暴力写了。
10:00--11:30 T3,暴力。不知道咋构造,感觉可以 2-sat 就乱写 2-sat 。写完发现没法保证至少一个变量为 1 。没法输出方案。
11:30--11:40 蹬T1,T2.
11:40--12:00 T3,最后十几分钟突然想起来好像可以做个前缀的 2-sat 保证至少 1 个变量为 1.不过暂时不知道怎么放到树上也没时间了。

回顾反思

T1:
插头。
但是我的插头写假了。
复习一下插头板子。

T2:
拆分一下贡献,如果选了相邻两个坐标代价是 \(\min(A,B)\) ,单独一个是 \(A\) 。这样对于确定的方案,计算代价是 \(O(n)\) 的。赛时对这个写了 dp ,复杂度直接白白多了一维。
然后赛时想法的瓶颈在于没法维护相邻的状态。
发现,对 2D 分治一下,每次考虑在 2D 模意义下相同的位置,这样一个点可选择的位置是相邻的,枚举上一组位置集合的状态压缩,这样相邻位置的区间情况也是知道的,就可以 dp 了。
类似题貌似考过,就是代价贡献只和模意义下的坐标关系很强时,对模意义下分组分别做。
然而事实上题解的复杂度貌似是假的。

T3:
赛时最后猜想起来对前缀做 2-sat 就可以解决保证至少一个变量为 1 的问题。
对于数列,对前缀做 2-sat 。
放到树上,可以对子树做 2-sat 。即关键点 x 在子树 y 中 真/假 。

posted @ 2023-05-30 20:50  Cafard  阅读(10)  评论(0)    收藏  举报