atcoder#ABC137E. [ABC137E] Coins Respawn

[ABC137E] Coins Respawn

题目描述

1 1 から N N までの番号がつけられた N N 頂点と M M 辺からなる有向グラフがあります。 i i 番目の辺は頂点 Ai A_i から頂点 Bi B_i へと向かい、この辺の上には Ci C_i 枚のコインが置かれています。 また、頂点 N N にはボタンが設置されています。

このグラフ上でゲームを行います。 あなたは頂点 1 1 でコインを 0 0 枚持ってゲームを開始し、辺をたどってコインを拾いながら頂点 N N を目指します。 1 1 本の辺を通るには 1 1 分の時間がかかり、辺を通るたびにその辺の上に置かれているすべてのコインを拾うことができます。 ゲームの世界ではよくあるように、ある辺を通ってその上のコインを拾っても、その辺を次に通る際には同じ枚数のコインが再び出現しており、それらを再び拾うことができます。

頂点 N N に到着したとき、ボタンを押してゲームを終了することができます。(ボタンを押さずに移動を続けることもできます。) ただし、ゲームを終了する際に、ゲーム開始からの経過時間を T T 分として T × P T\ \times\ P 枚のコインの支払いが要求されます。持っているコインの枚数が T × P T\ \times\ P 枚未満の場合は、代わりに持っているコインをすべて支払います。

この支払いの後に残ったコインの枚数があなたのスコアとなります。 獲得できるスコアの最大値が存在するか判定し、存在する場合はその最大値を求めてください。

输入格式

入力は以下の形式で標準入力から与えられる。

N N M M P P A1 A_1 B1 B_1 C1 C_1 : : AM A_M BM B_M CM C_M

输出格式

獲得できるスコアの最大値が存在する場合はその最大値を、存在しない場合は -1 を出力せよ。

题目大意

有一个有向图,点的编号为 1N1 \sim N,有 MM 条边,每条边为 aibia_i \to b_i,这条边上有 cic_i 枚硬币,此外节点 NN 上还有个按钮。

您从节点 11 开始移动,初始硬币为 00,你需要抵达 NN,经过每条边耗时 11 分钟,每次经过一条边你都能收获硬币,无论重复多少次。

当您抵达 NN 时,你可以结束游戏,也可以继续游戏,但是当你结束游戏的时候,你需要支付 T×PT \times P 枚硬币,当您的硬币少于这个值时,你需要支付全部的硬币。

你的分数就是在付款后所拥有的硬币数量,如果可以确定能获得一个最大分数,你需要输出可以获得的分数的最大值。

3 3 10
1 2 20
2 3 30
1 3 45
35
2 2 10
1 2 100
2 2 100
-1
4 5 10
1 2 1
1 4 1
3 4 1
2 2 100
3 3 100
0

提示

制約

  • 2  N  2500 2\ \leq\ N\ \leq\ 2500
  • 1  M  5000 1\ \leq\ M\ \leq\ 5000
  • 1  Ai, Bi  N 1\ \leq\ A_i,\ B_i\ \leq\ N
  • 1  Ci  105 1\ \leq\ C_i\ \leq\ 10^5
  • 0  P  105 0\ \leq\ P\ \leq\ 10^5
  • 入力中の値はすべて整数である。
  • 頂点 1 1 から頂点 N N に到達することが可能である。

Sample Explanation 1

![入力例 1 で与えられるグラフの図](https://img.atcoder.jp/ghi/5cb074e2d7c3282da137ac4ab2fbc700.png) 頂点 1 1 から頂点 3 3 に移動する方法は以下の 2 2 通りです。 - 頂点 1  2  3 1\ \rightarrow\ 2\ \rightarrow\ 3 : 道中でコインを 20 + 30 = 50 20\ +\ 30\ =\ 50 枚拾う。ゲーム開始から 2 2 分後に頂点 3 3 に着き、ボタンを押してコインを 2 × 10 = 20 2\ \times\ 10\ =\ 20 枚支払い、50  20 = 30 50\ -\ 20\ =\ 30 枚残る。 - 頂点 1  3 1\ \rightarrow\ 3 : 道中でコインを 45 45 枚拾う。ゲーム開始から 1 1 分後に頂点 3 3 に着き、ボタンを押してコインを 1 × 10 = 10 1\ \times\ 10\ =\ 10 枚支払い、45  10 = 35 45\ -\ 10\ =\ 35 枚残る。 よって、獲得できるスコアの最大値は 35 35 です。

Sample Explanation 2

![入力例 2 で与えられるグラフの図](https://img.atcoder.jp/ghi/eb2188ad1e8189f963d233415fb293b6.png) 頂点 1 1 から伸びる辺を通ると頂点 2 2 に着き、ここで頂点 2 2 から自分自身へと向かう辺を t t 回通ってからボタンを押すとスコアは 90 + 90t 90\ +\ 90t となります。よってスコアは無限に高めることができ、獲得できるスコアの最大値は存在しません。

Sample Explanation 3

![入力例 3 で与えられるグラフの図](https://img.atcoder.jp/ghi/217f7a224b80a05d8e25140c57e65ae7.png) 頂点 1 1 から頂点 4 4 へと直接向かう辺を通ること以外に頂点 1 1 から頂点 4 4 に移動する方法はありません。この辺の上で 1 1 枚のコインを拾いますが、ゲーム終了時に 10 10 枚のコインの支払いを要求されてスコアは 0 0 となります。 なお、頂点 1 1 から頂点 2 2 へと向かう辺を通るとその後コインを無限に拾えますが、頂点 4 4 に到達してゲームを終了することができなくなるため無意味です。