zoukankan      html  css  js  c++  java
  • 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的祖先节点判断即可。

  • 相关阅读:
    Sum of Medians
    MINSUB
    Girls Love 233
    How Many Answers Are Wrong
    Sorting It All Out
    Cube Stacking
    Boolean Expressions
    表达式求值
    #1301 : 筑地市场
    用seaborn对数据可视化
  • 原文地址:https://www.cnblogs.com/cszmc2004/p/13155684.html
Copyright © 2011-2022 走看看