zoukankan      html  css  js  c++  java
  • jzoj5679

    题意

    给定一棵树,及(s,t),A,B玩游戏,A初始在(s)不想去(t),B想A去(t)
    A每次在一个点,会选择沿着一条边走过去,走完之后这条边被打上了一个标记,A不能再走了;若A当前所在点的边全部被打上了标记,那就不能动了。
    B每次可以选择消除一条边的标记或永久删除一条边。
    B先手,花费为执行操作的次数。求B最少的花费使得A到达(t)点。

    做法

    先考虑一种简单情况,若(s,t)之间有直接连边
    为直观考虑,重新构图,令(t)为根,除(s)子树其他全部删掉,现在的情况就是(t)下仅剩一棵子树(s)
    假设B不执行操作
    A每次往下面逃,最后若在(u)点时自己将自己赌死了,这个时候A不能动,B可以任意操作
    B的操作就会保留(ulongrightarrow t)这条路径上,断开与外界的连边。然后将(ulongrightarrow t)上的标记移除,则A行走路径唯一

    若不断开与外界的连边,往回走的时候进去了外界,之后还需要格外花费移除标记,所以不会变劣

    (w_u)为当(u)为叶子节点上述花费
    现在考虑A往下逃的过程中,B花费一些使答案更优,为方便计算答案,用类似归纳的方法,即计算非叶子节点(u)的最优答案(w_u),之前(vin son_u)已经被计算出来了
    显然是切断一个通往最大答案的地方,若有多个则不切断(其实这里不切断也可以选择切断,否则回来的时候还是得切)

    现在考虑一般情况,即(s,t)间还有其他节点(s,x_1,x_2,...,x_{k-1},x_k,t)
    同样按照上述方法计算出(w_u)(即到达当前节点(u)后到达(t)之后的最小花费)
    然后这个时候发现从(s)走会比较难选择
    那我们二分答案(mid),然后先考虑(s)的子树(不包括(x_1)),若往某子树走会不满足(mid),则切断边,若有多个则不合法
    切完后若没有子树不满足了。那(A)(x_1)走,再看是否有不满足,这里要考虑若之前(s)没切过边,则(x_1)有两次的切边机会,后面的同理

  • 相关阅读:
    好看的WEB配色..留的美化界面用..
    为phpcms v9 后台增加按类别查找的功能,且不影响升级。
    OS开发过程中常用开源库
    stanford《Developing Apps for ios》第五课demo要点
    C语言简陋的播放mp3代码
    编译ffmpeg for iOS,并调试iFrameExtractor demo
    windows下配置nginx pathinfo模式,支持thinkphp
    初学GTK+2.0与glade的一些网络资源
    在Centos6.3中桥接方式配置vm virtualbox中的系统网络
    Foundation的基本操作—字符串、数组、字典、集合
  • 原文地址:https://www.cnblogs.com/Grice/p/12988509.html
Copyright © 2011-2022 走看看