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