简要说明一下我的做法:
先以当前小 Z 在的点 x 为根
-
如果 Youyou 在不同的子树
x 不动
-
如果 Youyou 在同一个子树
x 朝这个子树走一步
这样做的正确性我是这样想的:
对于情况 2,操作的正确性十分显然,所以只用证明为什么情况 1 时不动是最好的选择。
假设有两个 Youyou 在不同的子树,分别在 y,z 两个点上。
如果 x 朝 y 走了一步,那么 dis(x,y)←dis(x,y)−2,dis(x,z) 不变,先朝 y 走再向 z 走的代价是
⌈2dis(x,y)⌉+⌈2dis(x,z)⌉
考虑另一种情况,x 不动,其代价即为
min(dis(x,y),dis(x,z))+⌈2max(dis(x,y),dis(x,z))−min(dis(x,y),dis(x,z))⌉
如果 dis(x,y),dis(x,z) 均为奇数,那么不动的代价比动的代价小,否则代价一样,所以在情况 1 时不动是更优的。
由于在题解中并没有看见类似做法,所以想知道这样做法是否有问题。