E

首先注意到这个问题事实上非常复杂(两棵树上博弈),基础的转化无效,于是考虑简化情形。

手玩很多样例可以发现,似乎很容易出现无限循环的情况,进一步地,有观察:

  • 若第一棵树上存在相邻点 \(u, v\) 在第二棵树上距离 \(> 2\),那么只要走到 \(u, v\) 其中一个点先手一定存在策略能够无限循环下去。

显然走到哪个点是对称的,不妨假设走到 \(u\)。

那么先手可以在后手走到 \(u\) 在第二棵树上相邻点时移动到 \(v\),由于树上路径唯一,后手不可能在一次操作内移动到 \(v\)。

借此,我们将满足上述情形的点对称作关键点,它们的连边称作关键边。

注意到我们不需要考虑关键边(因为走了关键边必定在此之前走到了关键点),于是我们将关键边全部删去,第一棵树变为森林,此时问题转化为:

  • 先手从 \(X\) 开始走,走到关键点赢,后手从 \(Y\) 开始追赶 \(X\) 碰到了后手赢(先手无法赢的时候尽可能最大化步数,后手尽可能最小化步数)。确定双方谁赢并且在后手赢的时候输出最大步数。

由于此时第一棵树上的连边在第二棵树上距离 \(\le 2\),因此考虑以第二棵树为主树将第一棵树在其上连虚边(这样方便观察)。

此时貌似仍然没有头绪,考虑 弱化问题:所有第一棵树上连边在第二棵树上距离 \(=1\)。

此时显然有如下观察(证明不难):

  • 后手每次的最优策略一定是向先手方向移动。
  • 先手的最优策略一定是走到一个不会在路径过程中被后手撞到的(最远)位置然后乖乖等死,或找到一个不会在路径过程中被后手撞到的关键点(优先)。

对于后者,不难发现这些位置 \(u\) 满足:\(dis_{X, u} < dis_{Y, u}\)。

充分性显然,必要性可以考虑先手的最优策略。

那么找到满足上述条件点中 \(dis_{Y, u}\) 的最大值即可,答案就是其的两倍。

回到原问题,我们做类似的观察可以发现先手后手的最优策略与弱化问题一致!

我们容易证明:先手在与后手距离 \(\le 2\) 的时候最优策略是远离先手 / 不动(无路可走)。

因此可以证明先手的最优策略。

而后手的最优策略显然是先手最优策略下的答案上界。

因此只需要找到可行点的判定条件即可。

不难发现,此时一个点可行当且仅当:

  • 其在第一棵树上的所有祖先(以 \(X\) 为根)\(u\)(包含其本身)满足:\(disA_{X, u} < disB_{Y, u}\)

充分性考虑归纳证明。

必要性容易通过先手在与后手距离 \(\le 2\) 的时的必胜策略证明(先手不会在 \(\ge\) 的位置继续向后手靠近)

于是直接找到上述的可行点判定先手是否赢 / 后手赢情况下的最多次数即可。

复杂度 \(\mathcal{O}(n \log n)\),瓶颈在于求树上两点距离,当然本题中只需要判定距离是否 \(\le 2\),于是可以容易优化至 \(\mathcal{O}(n)\),但没太大必要。

AGC005 部分简要题解的更多相关文章

  1. Noip 2014酱油记+简要题解

    好吧,day2T1把d默认为1也是醉了,现在只能期待数据弱然后怒卡一等线吧QAQ Day0 第一次下午出发啊真是不错,才2小时左右就到了233,在车上把sao和fate补掉就到了= = 然后到宾馆之后 ...

  2. Tsinghua 2018 DSA PA2简要题解

    反正没时间写,先把简要题解(嘴巴A题)都给他写了记录一下. upd:任务倒是完成了,我也自闭了. CST2018 2-1 Meteorites: 乘法版的石子合并,堆 + 高精度. 写起来有点烦貌似. ...

  3. Codeforces 863 简要题解

    文章目录 A题 B题 C题 D题 E题 F题 G题 传送门 简要题解?因为最后一题太毒不想写了所以其实是部分题解... A题 传送门 题意简述:给你一个数,问你能不能通过加前导000使其成为一个回文数 ...

  4. HNOI2018简要题解

    HNOI2018简要题解 D1T1 寻宝游戏 题意 某大学每年都会有一次 Mystery Hunt 的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为 ...

  5. JXOI2018简要题解

    JXOI2018简要题解 T1 排序问题 题意 九条可怜是一个热爱思考的女孩子. 九条可怜最近正在研究各种排序的性质,她发现了一种很有趣的排序方法: Gobo sort ! Gobo sort 的算法 ...

  6. BJOI2018简要题解

    BJOI2018简要题解 D1T1 二进制 题意 pupil 发现对于一个十进制数,无论怎么将其的数字重新排列,均不影响其是不是 \(3\) 的倍数.他想研究对于二进制,是否也有类似的性质. 于是他生 ...

  7. CQOI2018简要题解

    CQOI2018简要题解 D1T1 破解 D-H 协议 题意 Diffie-Hellman 密钥交换协议是一种简单有效的密钥交换方法.它可以让通讯双方在没有事先约定密钥(密码)的情况下,通过不安全的信 ...

  8. AtCoder ExaWizards 2019 简要题解

    AtCoder ExaWizards 2019 简要题解 Tags:题解 link:https://atcoder.jp/contests/exawizards2019 很水的一场ARC啊,随随便便就 ...

  9. Comet OJ - Contest #2 简要题解

    Comet OJ - Contest #2 简要题解 cometoj A 模拟,复杂度是对数级的. code B 易知\(p\in[l,r]\),且最终的利润关于\(p\)的表达式为\(\frac{( ...

随机推荐

  1. Monkey工具之fastbot-iOS实践

    Monkey工具之fastbot-iOS实践 背景 目前移动端App上线后 crash 率比较高, 尤其在iOS端.我们需要一款Monkey工具测试App的稳定性,更早的发现crash问题并修复. 去 ...

  2. Counterfactual VQA: A Cause-Effect Look at Language Bias

    目录 概 主要内容 实现 代码 Niu Y., Tang K., Zhang H., Lu Z., Hua X. and Wen J. Counterfactual VQA: A Cause-Effe ...

  3. 在页面中添加两个 <select> 标签,用来显示年份和月份;同时添加两个 <ul> 标签,一个用来显示星期,另一个用来显示日期 在 JavaScript 脚本中动态添加年份和月份,获取当前日期的年份

    查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的 Date 对象,在页面上显示一个万年历.选择不同的年份和月份,在页面中显示当前月的日历 实现思路: 在页面中添加两个 <s ...

  4. C#/.NET之WebAPI(从入门到放弃一)

    1.怎么理解WebApi,他究竟是什么? 关于这一篇,视频学习可参照B站up主:全栈ACE,全栈ACE的个人空间,社区QQ群如下,有什么问题也可加群咨询. 首先使用Visual Studio创建一个新 ...

  5. MySQL客户端mysql常用命令

    通过MySQL自带的mysql命令行工具, 执行MySQL的相关命令. 1.连接MySQL服务端 mysql -uUserName -pPassword -h HostName_IP -P 3306 ...

  6. 基于CentOS7.x gitlab环境搭建,卸载,汉化 --卸载篇

    gitlab环境搭建,卸载,汉化 --卸载篇 完全卸载 停止gitlab gitlab-ctl stop 卸载gitlab rpm -e gitlab-ce 查看gitlab进程  ps aux | ...

  7. 第10组-Alpha冲刺 总结

    1.基本情况 组长博客链接:https://www.cnblogs.com/cpandbb/p/14007413.html 答辩总结: ·产品偏离了最开始的方向,地图和刷一刷功能做得没那么好,外卖订单 ...

  8. SQL高级优化(六)之MySQL索引

    一.索引概述 1. 索引的优点 ​ 为什么要创建索引?这是因为,创建索引可以大大提高系统的查询性能.如果不使用索引,查询时从第一行开始查询.如果使用了索引,所以就可以更加快速的找到希望的数据. 第一. ...

  9. vue2.0与vue3.0项目创建

    脚手架安装与卸载 安装 npm install -g vue-cli //or npm install -g @vue/cli 卸载 npm uninstall -g vue-cli //or npm ...

  10. javascript中什么时候要用\来转义

    1.定义字符串的单引号或双引号里的同符号或字符串内回车换行,比如A: a = "<a href=\"...\">a</a>"; B: a ...