#P16898. [Ontak2026]门与钥匙

[Ontak2026]门与钥匙

题目描述

Bajtazar 身处一条非常长的一维隧道中,希望从唯一的出口回家。

隧道中有 nn 扇关闭的门,同时也有 nn 把钥匙。每把钥匙恰好能打开一扇门,并且每扇门都恰好有一把对应的钥匙。Bajtazar 在行走过程中可以拾取钥匙,并且可以携带任意多把钥匙。

Bajtazar 知道:

  • 自己的初始位置 ss
  • 出口位置 hh
  • 每把钥匙的位置;
  • 每扇门的位置;
  • 每把钥匙对应哪扇门。

当 Bajtazar 第一次要穿过一扇关闭的门时,必须已经拿到对应的钥匙;拿到钥匙后即可打开该门并通过。

求 Bajtazar 到达出口所需行走的最短总距离。如果无论如何都无法离开隧道,输出 1-1

输入格式

第一行包含整数 tt,表示测试数据组数:

1t51041\le t\le 5\cdot 10^4

对于每组数据:

第一行包含三个整数 n,s,hn,s,h

  • 1n21051\le n\le 2\cdot 10^5
  • 106s,h106-10^6\le s,h\le 10^6

接下来 nn 行,第 ii 行包含两个整数 ki,gik_i,g_i

  • kik_i:第 ii 把钥匙的位置;
  • gig_i:这把钥匙所能打开的门的位置;
  • 106ki,gi106-10^6\le k_i,g_i\le 10^6

每组数据中的 2n+22n+2 个坐标 s,h,ki,gis,h,k_i,g_i 两两不同。

所有测试数据中 nn 的总和不超过 21052\cdot10^5

输出格式

对于每组数据输出一行:

  • 若可以到达出口,输出所需的最短行走距离;
  • 否则输出 -1

样例

4
2 1 10
2 0
-1 5
5 5 13
3 7
8 14
-1 11
9 1
2 10
4 40 0
20 80
50 30
70 60
90 10
1 -1 6
11 8
15
32
-1
7

样例说明

第一组数据中,Bajtazar:

  1. 11 走到位置 22,拿到能打开位置 00 处门的钥匙;
  2. 穿过位置 00 的门后走到 1-1,拿到能打开位置 55 处门的钥匙;
  3. 再穿过位置 55 的门走到出口 1010

第三组数据中,要穿过位置 1010 的门必须先取得位置 9090 的钥匙,但前往位置 9090 的途中又会被位置 6060 的门阻挡,而打开它所需的钥匙位于当前不可到达的位置 7070,因此无法逃离。

子任务

子任务 限制 分值
1 n1000n\le1000 18
2 任意两扇相邻的门之间至多有一把钥匙 23
3 答案恒为 1-1 3
4 答案恒不为 1-1 17
5 t=1t=1 13
6 无额外限制 26