1 条题解
-
0
自动搬运
来自洛谷,原作者为

Forge_Unique
这个家伙不懒,忙的没空留下什么东西。||使命,florr玩家搬运于
2025-08-24 22:38:10,当前版本为作者最后更新于2024-10-01 16:27:31,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
思路
首先考虑处理出二元组 表示从带有钥匙的点 到达带有同色宝箱的点 的路径,且该路径满足:是用 处的钥匙开 处的宝箱。
处理方法:
由于每个颜色之间互不影响,所以我们枚举颜色 ,建立以颜色为 的点为关键点的虚树。
路径要满足用 处的钥匙开 处的宝箱,也就是该路径上到达 时钥匙和宝箱数第一次相等。
所以我们枚举颜色为 的钥匙点 作为虚树的根节点开始遍历虚树,过程中记录钥匙数,遇到同色钥匙点 ,遇到同色宝箱点 。
如果过程中到 点钥匙数变为,那么记录下该路径 后返回。
由于钥匙数不超过 所以所有满足条件的路径不超过 。
显然如果旅行 包含路径 那么路径 就会对该旅行有贡献,那么考虑将旅行离线下来后,路径 会对哪些旅行 做贡献。
当 中不存在一个点是另一个点的祖先时:
显然,当 位于 的子树中且 位于 的子树中时会有贡献。
当 是 的祖先时:
记路径 的第二个点为 (即 向 方向走一条边到达的点)。
显然,当 不位于 的子树中且 位于 的子树中时会有贡献。
当 是 的祖先时同理。
由于一个点的子树内所有点的 序构成一段连续的区间。
将旅行 以 的 序分别作为横,纵坐标从而看成点,则上述在子树内的条件可以看成在平面上的一个矩形(一点是另一点祖先的情况可以看成一个大矩形减一个小矩形)。
所以问题转化为查询一个点位于多少个矩形中,这在平面上用扫描线做,并进行单点查询即可完成。
总时间复杂度:。
代码
- 1
信息
- ID
- 7678
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- 6
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者