模拟22

T1

式子拆开之后套龟速乘随便写。

T2

最开始看错题了,以为只要有一组分配方案合法即可,这样就不是很好做因为不能贪心的取,后来看到分配方案必须任意分都满足就可以一眼写了,二分的时候检验的时间复杂度有点高,所以必须要尽量减少不合法的检验,于是最开始倍增出二分的区间即可。

T3

挺不好想的一道题,首先要明确题意,小B可以在小A走到某个地方的时候断掉一条边,让小A走的距离更远,所以直接枚举删哪条边然后跑最短路是不对的。

首先我明白题意之后最开始想到的是定义\(f_{u,0/1}\)表示走到节点\(u\),已经用过或没用过限制的最短路是什么,发现这样没法转移,因为以后的最短路径可能经过之前走过的某条边,然后就没办法了。

题解给出的做法很妙,定义\(f_u\)为从\(u->n\)路径上使用过限制的最短路径,那么这样转移是很好转移的,要么当前这条边不删去,要么删去,写成式子就是\(f_u=min(max(f_v+w,d))\),其中\(d\)表示删除这条边后从\(u\)\(n\)的最短路径,其中的那个\(min,max\)的嵌套表示先由\(B\)决策,再由\(A\)取最优决策,看起来挺对的,但是仔细想想其实还是会有问题,因为这样只可以保证每条路径上只删去一条边,但是在一个点上进行决策时,有可能是删除了多条边的,因为中间取的是\(max\),好像错了?其实并不是,容易发现,只有当这条边是最短路径上的边时删去才会有用,不然我直接走最短路多好,所以实际上只会在最短路上断掉,如果最短路只有一条,相当于只取了一次最大值,好像挺对的,但是如果最短路有两条或以上,好像又不对,不过继续思考可以发现,如果有多条最短路,在当前节点删去一条边一定不优,具体就体现在\(d<f_v+w\),所以还是没有影响。故这样写是对的。

剩下的就随便写写就可以了,但是注意每次往上跳的时候要路径压缩,直接跳的时间复杂度是不对的。

T4

不是很难想但是考场上挂了,直接首尾相加然后发现变化量最多为一,把变化的减去就行。

posted @ 2020-10-25 11:27  An_Fly  阅读(97)  评论(0编辑  收藏  举报