250623 模拟赛

分数:\(30+20+15=65\)


T1 移球游戏

非常神秘的 dp。然后还是不是很会吧。


T2 Minimax

数据结构题!

czl 的做法是,发现 \(a_{x,i}+a_{x,j}\ge a_{y,i}+a_{y,j}\),然后就可以 CDQ 分治算出来每一组的贡献次数,然后乘上值加到答案里就好了。最小值只需要换成相反数。

然后 jsy 讲了一下(他说是)min-max 容斥的做法。懂了!


T3 前面忘了,还是树上邻域数点,后面忘了

点分治 + 随机化

先考虑二分。每次 \(check(w)\) 的时候需要计算树上 \(\le w\) 的路径数,点分治去做就好了。如何点分治呢,对于一棵有根树,所有点到树根的距离是树上父亲的数组某一位加上 \(1\),考虑用主席树维护。然后在某一层对所有节点进行排序的时候,可以二分两个点的距离第一个不同的位置,可以用字符串哈希之类的东西判断。

然后发现因为路径长度值域是 \(O(n^n)\) 的,二分的次数大概是 \(O(n)\) 的无法通过。所以不妨在 \(O(n^2)\) 条从小到大排序的路径中二分,\(check\) 次数是 \(O(\log n)\)。发现这个排序也不好做,所以考虑每次在当前区间内随机一条路径,这样每次期望减少一半的路径数,复杂度也是对的。

posted @ 2025-06-25 21:53  baiguifan  阅读(10)  评论(0)    收藏  举报