AT_agc072_e [AGC072E] Flights 2
题目描述
日本有 $N$ 个机场,每个机场编号为 $1, 2, \dots, N$。AtCoder 航空公司在日本运营着 $M$ 条航线,每条航线编号为 $1, 2, \dots, M$。航线 $j$ 从机场 $A_j$ 出发,抵达机场 $B_j$,票价为 $C_j \times F$ 日元。
乘坐 AtCoder 航空公司的飞机可以获得一种名为“里程(マイル)”的货币。初始时你拥有 $0$ 里程。每乘坐一次航线 $j$,你可以获得 $C_j$ 里程。此外,在机场 $i$,每 $1$ 里程可以兑换 $R_i$ 日元。由于有约束 $0 \leq R_i \leq F-1$,所以无法通过不断换乘飞机来无限制地获得金钱。
需要注意的是,兑换的里程数和所持金可以不是整数,但不能为负数。
现在,想要通过飞机从机场 $1$ 到达机场 $N$,你最少需要准备多少日元的初始资金?
请你解答 $\mathrm{TESTCASES}$ 个测试用例。
输入格式
输入通过标准输入给出,格式如下,其中 $\mathrm{case}_k$ 表示第 $k$ 个测试用例。
> $\mathrm{TESTCASES}$
> $\mathrm{case}_1$
> $\mathrm{case}_2$
> $\vdots$
> $\mathrm{case}_{\mathrm{TESTCASES}}$
每个测试用例格式如下:
> $N$ $M$ $F$
> $A_1$ $B_1$ $C_1$
> $A_2$ $B_2$ $C_2$
> $\vdots$
> $A_M$ $B_M$ $C_M$
> $R_1$ $R_2$ $\cdots$ $R_N$
输出格式
请输出 $\mathrm{TESTCASES}$ 行。第 $k$ 行输出第 $k$ 个测试用例中,为了能够通过飞机从机场 $1$ 到达机场 $N$,所需的最小初始资金。
当你的答案与标准答案的绝对误差或相对误差不超过 $10^{-6}$ 时,视为正确。
说明/提示
### 约束条件
- $1 \leq \mathrm{TESTCASES} \leq 40\,000$
- $2 \leq N \leq 400$
- $1 \leq M \leq N \times (N-1)$
- $1 \leq F \leq 100$
- $1 \leq A_j \leq N$
- $1 \leq B_j \leq N$
- $A_j \neq B_j$
- $(A_1, B_1), (A_2, B_2), \dots, (A_M, B_M)$ 均互不相同
- $1 \leq C_j \leq 100$
- $0 \leq R_i \leq F-1$
- 存在从机场 $1$ 到机场 $N$ 的路径
- 所有测试用例的 $N^2$ 之和不超过 $160\,000$
- 所有输入均为整数
### 样例解释 1
如果初始资金为 $146$ 日元,可以按如下方式从机场 $1$ 到达机场 $3$:
1. 乘坐航线 $1$,从机场 $1$ 到机场 $2$。所持金变为 $146 - 70 = 76$ 日元,获得 $7$ 里程。
2. 在机场 $2$,将 $7$ 里程兑换为 $14$ 日元。所持金变为 $76 + 14 = 90$ 日元。
3. 乘坐航线 $2$,从机场 $2$ 到机场 $3$。所持金变为 $90 - 90 = 0$ 日元,获得 $9$ 里程。
如果初始资金少于 $146$ 日元,则无法从机场 $1$ 到达机场 $3$。
### 样例解释 2
如果初始资金为 $106$ 日元,可以按如下方式从机场 $1$ 到达机场 $4$:
1. 乘坐航线 $1$,从机场 $1$ 到机场 $2$。所持金变为 $106 - 70 = 36$ 日元,获得 $7$ 里程。
2. 乘坐航线 $3$,从机场 $2$ 到机场 $3$。所持金变为 $36 - 10 = 26$ 日元,获得 $1$ 里程。
3. 在机场 $3$,将 $8$ 里程兑换为 $72$ 日元。所持金变为 $26 + 72 = 98$ 日元。
4. 乘坐航线 $4$,从机场 $3$ 到机场 $2$。所持金变为 $98 - 10 = 88$ 日元,获得 $1$ 里程。
5. 在机场 $2$,将 $1$ 里程兑换为 $2$ 日元。所持金变为 $88 + 2 = 90$ 日元。
6. 乘坐航线 $2$,从机场 $2$ 到机场 $4$。所持金变为 $90 - 90 = 0$ 日元,获得 $9$ 里程。
如果初始资金少于 $106$ 日元,则无法从机场 $1$ 到达机场 $4$。
由 ChatGPT 4.1 翻译