#P13515. [KOI 2025 #1] 木槿花开了

[KOI 2025 #1] 木槿花开了

题目背景

试题来源:https://koi.or.kr/archives/。中文翻译做了少量本土化修改。

按照署名—非商业性使用—相同方式共享 4.0 协议国际版进行授权。

题目描述

KOI 村庄由 NN 个建筑和 MM 条道路组成。

建筑从 1 到 NN 编号,每个建筑可能有也可能没有窗户。对于 1iN1 \le i \le N 的每个 ii,如果第 ii 个建筑有窗户,则 ci=1c_i=1,如果没有窗户,则 ci=0c_i=0。规定第 1 个建筑和第 NN 个建筑没有窗户,即 c1=cN=0c_1 = c_N = 0

道路从 1 到 MM 编号,每条道路都是连接一个起始建筑和一个到达建筑的单向通道。对于 1jM1 \le j \le M 的每个 jj,第 jj 条道路从建筑 xjx_j 开始,到建筑 yjy_j 结束,通过这条道路需要花费恰好 tjt_j 秒。因为是单向道路,所以不能逆向行驶(即,从建筑 yjy_j 移动到建筑 xjx_j)。

在 KOI 村庄,Hankook 和 Jeong-ul 打算玩一个基于“木槿花开了”游戏改编的以下游戏。

游戏开始时,Jeong-ul 在 1 号建筑。Jeong-ul 的目标是在不被 Hankook 的视线发现一次的情况下,尽可能快地到达 NN 号建筑。相反,Hankook 的目标是在 Jeong-ul 到达 NN 号建筑之前找到他。

Hankook 睁着眼时可以看到整个 KOI 村庄,但无法看到没有窗户的建筑内部。也就是说,Hankook 只能看到有窗户的建筑内部和所有道路。

Hankook 从游戏开始(0 秒)时起,周期性地重复以下动作:

  • 首先,闭上眼睛恰好 aa 秒。
  • 紧接着,睁开眼睛并观察村庄恰好 bb 秒。
  • 此过程无限重复。

我们可以将上述过程用数学公式严格地表达如下:

  • 我们定义“从游戏开始时经过的时间”为 tt(以秒为单位)。
  • 当时间 t=k(a+b)+lt = k(a+b) + l 时(其中 kk 为非负整数, ll 为满足 0l<a+b0 \le l < a+b 的实数):
    • 如果 0l<a0 \le l < a,Hankook 闭着眼睛。
    • 如果 al<a+ba \le l < a+b,Hankook 睁着眼睛。
  • 也就是说,对于非负整数 kk,Hankook 闭眼的时间是闭区间 [k(a+b),k(a+b)+a][k(a+b), k(a+b)+a],睁眼的时间是开区间 (k(a+b)+a,(k+1)(a+b))(k(a+b)+a, (k+1)(a+b))

Jeong-ul 从游戏开始的时刻(0 秒)起,可以随时开始移动,并且在建筑内部(无论是否有窗户)等待和移动都是自由的,不消耗时间。从建筑出来或进入建筑内部也不消耗时间。如果 Jeong-ul 开始沿着某条道路移动,他必须花费该道路所需的确切时间来移动,并且在移动过程中不能在道路上停下或等待。移动结束后,他将到达道路的终点建筑。

Jeong-ul 被 Hankook 发现的基准如下:

  • 在 Hankook 睁着眼的时候,如果 Jeong-ul 位于道路上或在有窗户的建筑内部,他会立即被发现,游戏随之结束。因此,在 Hankook 睁着眼的时间段内,Jeong-ul 必须位于没有窗户的建筑内。
  • 在 Hankook 闭着眼的时候,无论 Jeong-ul 在哪里,都绝对不会被发现。
  • 请注意,如果 Jeong-ul 进入没有窗户的建筑的时刻,恰好是 Hankook 开始睁眼的瞬间;或者他进入道路开始移动的时刻,恰好是 Hankook 开始闭眼的瞬间,则不会被发现。

在这些条件下,请编写一个程序,判断 Jeong-ul 是否有可能在不被 Hankook 发现一次的情况下安全到达 NN 号建筑,如果可能,计算 Jeong-ul 到达 NN 号建筑所需的最短时间(以秒为单位)。

输入格式

第一行给出两个整数 NNMM,以空格分隔。

接下来的 MM 行给出道路的信息。其中第 jj (1jM1 \le j \le M) 行包含三个整数 xj,yj,tjx_j, y_j, t_j,以空格分隔。

再下一行给出 NN 个整数 c1,c2,,cNc_1, c_2, \cdots, c_N,以空格分隔。

最后一行给出两个整数 a,ba, b,以空格分隔。

输出格式

如果无论 Jeong-ul 如何移动都无法到达 NN 号建筑,则输出 -1

否则,输出 Jeong-ul 到达 NN 号建筑所需的最短时间(以秒为单位)。可以证明,这个值总是一个整数。

4 4
1 2 3
1 3 4
2 4 3
3 4 1
0 0 0 0
3 8
14
4 4
1 2 3
1 3 4
2 4 3
3 4 1
0 1 1 0
3 8
-1

提示

样例 1 解释

随着时间的推移,Jeong-ul 和 Hankook 可以按如下方式行动:

  • 0 秒 - 3 秒:Hankook 闭着眼睛。Jeong-ul 在 0 秒时进入 1 号道路(1 号建筑 → 2 号建筑),并于 3 秒时到达 2 号建筑。
  • 3 秒 - 11 秒:Hankook 在 3 秒时睁开眼睛。Jeong-ul 在 2 号建筑一直停留到 11 秒。
  • 11 秒 - 14 秒:Hankook 在 11 秒时闭上眼睛。Jeong-ul 在 11 秒时进入 3 号道路(2 号建筑 → 4 号建筑),并于 14 秒时到达 4 号建筑。

由于 Jeong-ul 没有比 14 秒更快到达 4 号建筑的方法,因此应当输出 14。

样例 2 解释

由于除 1 号和 4 号建筑外的所有建筑都有窗户,Jeong-ul 必须在 Hankook 睁开眼睛之前(即,在 a=3a=3 秒内)到达 4 号建筑。但是,Jeong-ul 不可能在 3 秒内到达 4 号建筑。因此,应当输出 -1

限制条件

  • 给定的所有数都是整数。
  • 3N20003 \le N \le 2000
  • 3M40003 \le M \le 4000
  • 对于每个 1jM1 \le j \le Mjj,有 $1 \le x_j, y_j \le N, x_j \ne y_j, 1 \le t_j \le 100,000$。
  • 对于 1j<kM1 \le j < k \le M 的任意 j,kj, k,有 (xj,yj)(xk,yk)(x_j, y_j) \ne (x_k, y_k)。也就是说,所有道路的起点和终点对都是唯一的。
  • 对于 2iN12 \le i \le N-1 的每个 iici{0,1}c_i \in \{0, 1\}
  • c1=cN=0c_1 = c_N = 0。即,1 号建筑和 NN 号建筑没有窗户。
  • 1a,b1091 \le a, b \le 10^9

子任务

  1. (12 分) N5,M10N \le 5, M \le 10
  2. (19 分) 对于 2iN12 \le i \le N-1 的每个 iici=1c_i=1
  3. (31 分) 对于 1jM1 \le j \le M 的每个 jjtj=1t_j=1
  4. (27 分) M=N1M=N-1。并且,对于 1jN11 \le j \le N-1 的每个 jjxj=j,yj=j+1x_j = j, y_j = j+1
  5. (61 分) 无附加限制条件。