赛时安排
7:40~7:50
先看题面,第二题是期望不想做,第三题估计是贪心/Dp,第四题有点像梦幻布丁那道题,不过好像只有20分
7:50~8:45
T1很像之前见的一道贪心题,不过有不一样,但是仔细一想发现都有相似的性质,只要能选就选,然后这样就会形成合法连通块,然后需要维护从每个点出发,只经过不超过某个值的点所能到达的连通块,这就让我想起了Kruskal重构树,但是这是点权我不知道怎么做,但是又一想只要把边权设为连接的两个点的权值最大值就能达到效果,然后对于更换武器,只需要找到重构树上某个节点字数内最大值,并维护用这个武器向上最远能到达的距离
询问的时候二分答案,然后树上倍增找到最远能到达的点,如果能到达根,则这个答案合法,复杂度
O
(
(
n
+
m
)
l
o
g
n
2
)
O((n+m)logn^2)
O((n+m)logn2),感觉有点危险,不过还是写了
8:45~10:10
这段时间非常自闭
写完之后发现最后一组大样例过不去,所以又赶紧写了个暴力对拍,发现n=100的时候,就会错,于是试着能不能再调小一点,终于拍了三千多组终于拍出了一个n=20的错误,我趁着这段时间写了T4的20分暴力,然后开始手动模拟,调了半天发现有一个地方会跳到0,然后就错了,于是赶紧改,改完第三组大样例也过了,又用暴力拍了n<=100觉得没什么问题,但是N>100000的时候跑了3s多,所以想优化
10:10~11:10
发现不需要二分,每个点的答案就是它上面第一个能跳到根节点的点的权值,只需要遍历一遍树就行了,复杂度O((n+m)logn),又测了极限数据发现依然跑了2600ms,于是接着优化,又发现不需要树上倍增,可以用简单的树形求出,复杂度O(n+mlogn),又测了一下,依然有2134ms,没办法,最后只能加快读,发现直接就到了1500ms,然后又拍了一千多组没错就交了
11:10~11:20
感觉T4的正解应该要离线,不过这个操作不具有区间可加性,然后又考虑r=m的特殊性质,思考能不能倒叙通过一些转化得到答案,发现不太行
11:20~12:06
时间不多了,只能去写T3的暴力,但是dfs的时候传参有问题,所以一直到最后也没调出来,最后直接写了个把所有数加起来就交了
赛后总结
1:T3的数据造水了,直接不进行任何交换的答案就是最优解,输出能拿到70分,但是我没有分段,导致dfsT了,把dfs删了就有70分
2:T1上花费的时间太多了,不过好歹做出来了,要不然今天一上午就白费了,不过依然导致根本没有时间思考后面的题
3:不能一看见期望的题就害怕,看完题解感觉T2还挺简单的