luogu#P16397. [ECUSTPC 2026 Spring] 右灯左行

[ECUSTPC 2026 Spring] 右灯左行

背景

:::epigraph 的冲突, :::

题目描述

本题和试题 D 左灯右行共用相同的背景,两道题之间有较大的关系,建议在尝试其中一题前首先阅读另一题的文本。

这不是一道交互题。

小 T 面对 T 城的地铁图犯了难……

具体而言,这座城市在 E 河两岸,北岸有 nn 个地铁站点 N1,N2,,NnN_1, N_2, \dots, N_n,南岸有 nn 个地铁站点 S1,S2,,SnS_1, S_2, \dots, S_n

T 城总共有 n1n-1 条地铁线路,每条线路都是环线,其中第 ii 条环线连接的地铁站是 NiNi+1Si+1SiNiN_i - N_{i+1} - S_{i+1} - S_i - N_i,但这些地铁环线都是单向运行的,可能是 $N_i \leftarrow N_{i+1} \leftarrow S_{i+1} \leftarrow S_i \leftarrow N_i$ 也可能是 NiNi+1Si+1SiNiN_i \to N_{i+1} \to S_{i+1} \to S_i \to N_i

每条环线都有一个价目表 ui,di,li,riu_i, d_i, l_i, r_i,分别表示这 4 个相邻站(NiNi+1N_i - N_{i+1}, SiSi+1S_i - S_{i+1}, NiSiN_i - S_iNi+1Si+1N_{i+1} - S_{i+1})之间坐一站地铁移动的价格,注意坐一站地铁的方向由地铁的运行方向而定,可能是 NiNi+1N_i \to N_{i+1} 也可能是 NiNi+1N_i \leftarrow N_{i+1}

高兴的是,时空白洞吐出了价目表上这些环线的运行方向和价格,大 K 准备求助小 T 来得到一些通过地铁移动的价格。

大 K 会告诉小 T 这些环线的运行方向和价目表,随后小 T 需要回答 qq 个问题:

  • 地铁站 xx(可以是 NiN_i 也可以是 SiS_i,下略)到地铁站 yy 坐地铁,在给定的地铁价目表下,至少需要支付多少地铁费用?
  • 若不同环线连接同一对相邻站,则这些边同时存在并且都可以使用。一次旅行的费用为所经过边权之和,站点间换乘不额外收费。

请帮助小 T 解决这个问题。

输入格式

第一行输入一个整数 T (1T105)T \ (1 \le T \le 10^5),表示测试数据的数量。

每组测试数据第一行输入两个整数 nnq (2n105,1q105)q \ (2 \le n \le 10^5, 1 \le q \le 10^5),表示参数和询问数量,其中地铁站共 2n2n 座,环线共 n1n-1 条。

随后输入 n1n-1 行,其中第 ii 行输入 4 个整数 $u_i, d_i, l_i, r_i \ (0 \le u_i, d_i, l_i, r_i \le 10^9)$,分别表示第 ii 条环线上 NiNi+1N_i - N_{i+1}, SiSi+1S_i - S_{i+1}, NiSiN_i - S_iNi+1Si+1N_{i+1} - S_{i+1} 这四个相邻站之间的移动价格。

随后输入一行一个长度为 n1n-1 的字符串 SS,其中第 ii 个字符 Si{I,0}S_i \in \{\texttt{I}, \texttt{0}\},若 Si=IS_i = \texttt{I} 则表示第 ii 条环线的方向为 $N_i \leftarrow N_{i+1} \leftarrow S_{i+1} \leftarrow S_i \leftarrow N_i$,若 Si=0S_i = \texttt{0} 则表示第 ii 条环线的方向为 NiNi+1Si+1SiNiN_i \to N_{i+1} \to S_{i+1} \to S_i \to N_i

随后输入 qq 行每行输入 4 个元素 Sx,idx,Sy,idyS_x, id_x, S_y, id_y,$(S_x, S_y \in \{\text{N}, \text{S}\}, id_x, id_y \in \{m \in \mathbb{N} : 1 \le m \le n\})$,表示大 K 询问小 T 位于 SxS_x 岸的第 idxid_x 个地铁站 (Sx)idx(S_x)_{id_x} 到位于 SyS_y 岸的第 idyid_y 个地铁站 (Sy)idy(S_y)_{id_y} 之间至少需要支付多少地铁费用。

保证所有测试数据输入中的 n3×105\sum n \le 3 \times 10^5, q3×105\sum q \le 3 \times 10^5

输出格式

每组测试数据输出 qq 行,第 ii 行输出一个整数 dd 表示小 T 收到的第 ii 个询问的答案,也即 (Sx)idx(S_x)_{id_x}(Sy)idy(S_y)_{id_y} 至少需要支付多少地铁费用。

3
3 5
10 3 1 2
10 10 1 1
OI
N 1 N 2
N 2 N 3
N 2 S 2
S 2 N 2
N 1 N 1
6 1
5 1 7 3
2 6 3 4
6 8 1 7
10 0 7 8
4 5 4 9
IOIOI
N 4 S 4
6 1
4 5 7 6
5 0 9 1
1 5 1 5
10 4 7 1
2 1 3 3
OIOIO
S 6 S 4
10
12
1
14
0
14
17

提示

样例 1 解释

:::align{center} :::

上面的图展示了第 1 组测试数据中地铁的运行方向和价目表。