jzoj5679

原题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的祖先节点判断即可。

原文地址:https://www.cnblogs.com/cszmc2004/p/13155684.html