原题loj2482。
双倍经验jzoj5388
以前做过但是未完全理解。
一个博弈论。
把老鼠夹的位置设为根。
老鼠的走法只有两种:
1.一直向下走
2.向上走几步,再一直向下走。
之所以在向下走任意一步后不能向上走,是因为父亲边会被弄脏。
然后,管理员的最优决策一定是堵住老鼠到根节点的其余非必经边,再疏通所有到根节点的边让老鼠走。
如果疏通下面的边,则老鼠可能可以向下走,对管理员不利。
如果封住其他边,则步数要更多,老鼠也能走到非必经边去,要更长时间才能捕获老鼠。
设f[i]表示i节点走到叶节点,再走到u,最多走几步。
管理员实际上可以在老鼠操作时封住一些枝条。由于管理员想让时间尽量小,封住的肯定是f值最大的枝条。
所以f[i]=f[second]+du[i]-1
现在考虑向上走几步的情况。
设s[x]表示x到根的岔路口数。g[x]表示x第一次向下走,然后游戏结束后的最小步数。
则g[x]=f[x]+s[fa[x]]-[fa[x]!=start]
有可能一段岔路口被堵住,所以要减去后面的东西。
答案显然有二分性,所以可以二分,判断md是否合法。
每次老鼠可能向上走,对于每个start的祖先节点判断即可。