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

  • 相关阅读:
    重构之重新组织函数(ExTract Method)
    设计模式之桥接模式
    设计模式原则之里氏替换原则
    设计模式原则之依赖倒置原则
    设计模式原则之接口隔离原则
    设计模式原则之单一职责原则
    编译php5.6
    wireshark总结
    Blu-Ray BRRip 和 BDRip 的区别
    openwrt虚拟机的network unreachable
  • 原文地址:https://www.cnblogs.com/cszmc2004/p/13155684.html
Copyright © 2011-2022 走看看