题意
给定一棵树,及(s,t),A,B玩游戏,A初始在(s)不想去(t),B想A去(t)。
A每次在一个点,会选择沿着一条边走过去,走完之后这条边被打上了一个标记,A不能再走了;若A当前所在点的边全部被打上了标记,那就不能动了。
B每次可以选择消除一条边的标记或永久删除一条边。
B先手,花费为执行操作的次数。求B最少的花费使得A到达(t)点。
做法
先考虑一种简单情况,若(s,t)之间有直接连边
为直观考虑,重新构图,令(t)为根,除(s)子树其他全部删掉,现在的情况就是(t)下仅剩一棵子树(s)
假设B不执行操作
A每次往下面逃,最后若在(u)点时自己将自己赌死了,这个时候A不能动,B可以任意操作
B的操作就会保留(ulongrightarrow t)这条路径上,断开与外界的连边。然后将(ulongrightarrow t)上的标记移除,则A行走路径唯一
若不断开与外界的连边,往回走的时候进去了外界,之后还需要格外花费移除标记,所以不会变劣
令(w_u)为当(u)为叶子节点上述花费
现在考虑A往下逃的过程中,B花费一些使答案更优,为方便计算答案,用类似归纳的方法,即计算非叶子节点(u)的最优答案(w_u),之前(vin son_u)已经被计算出来了
显然是切断一个通往最大答案的地方,若有多个则不切断(其实这里不切断也可以选择切断,否则回来的时候还是得切)
现在考虑一般情况,即(s,t)间还有其他节点(s,x_1,x_2,...,x_{k-1},x_k,t)
同样按照上述方法计算出(w_u)(即到达当前节点(u)后到达(t)之后的最小花费)
然后这个时候发现从(s)走会比较难选择
那我们二分答案(mid),然后先考虑(s)的子树(不包括(x_1)),若往某子树走会不满足(mid),则切断边,若有多个则不合法
切完后若没有子树不满足了。那(A)往(x_1)走,再看是否有不满足,这里要考虑若之前(s)没切过边,则(x_1)有两次的切边机会,后面的同理