• 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)有两次的切边机会,后面的同理

  • 相关阅读:
    ssh免密码登陆设置时Authentication refused: bad ownership or modes错误解决方法
    centos7下安装python3
    mongodb基本操作
    mongodb之增删改查
    openfire插件开发之IQHander
    centos7下安装MongoDB4.0
    XMPP节之message,presence,IQ介绍
    linux命令 比较两个文件
    关于内存泄露
    一些术语——依赖倒置•控制反转•依赖注入•面向接口编程
  • 原文地址:https://www.cnblogs.com/Grice/p/12988509.html
Copyright © 2020-2023  润新知