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)\)。发现这个排序也不好做,所以考虑每次在当前区间内随机一条路径,这样每次期望减少一半的路径数,复杂度也是对的。
浙公网安备 33010602011771号