重链剖分测试。

T1(P6098)

板子。

T2(P4092)

暴力做法:重剖维护区间和,每查到一条链的和 \(>0\) 就往上跳即可。这能拿 92pts。

观察到暴力跳的部分很慢。事实上,我们只需要将其换成二分即可通过。

这里有一个小细节:普通的二分是不行的(至少我的写法不行),因为 \(l,r\) 初始时并不是区间的左右端点,所以要换成递归写法。

总结:二分的写法有循环和递归两种,要根据实际情况适当选取。

T3(P4374)

可以对于每一条边,将其切掉后枚举 \(m\) 条边进行连接并取最小代价,时间复杂度 \(O(nm)\),无法接受。

转换研究对象。容易发现对于一条加边,当且仅当其端点构成的简单路径上的边切掉时,它才会有用。于是对于每一条原边,维护其切掉后加边的最小代价。如何维护?仅需将加边按代价降序排列,然后对于每一条加边,对其端点构成的简单路径上的边进行区间赋值即可。这样便可以保证每条边的代价一定最小。最后单点查询即可,时间复杂度 \(O(n \log n)\),可以通过。

总结:优化的技巧(转换研究对象)、注意无解情形。

整场比赛总结

预计:\(100+90+100=290\)

实际:\(100+90+12=202\)

原题场,赢不了一点!!!

posted @ 2025-06-03 13:26  _KidA  阅读(11)  评论(0)    收藏  举报