#abc137e. [abc137_e]Coins Respawn

[abc137_e]Coins Respawn

问题描述

给定一个有 NN 个顶点编号为 11NN 的有向图,以及 MM 条边。第 ii 条边从顶点 AiA_i 指向顶点 BiB_i,该边上放置了 CiC_i 枚硬币。此外,顶点 NN 上有一个按钮。

我们在该图上玩一个游戏。你从顶点 11 开始,没有任何硬币,通过遍历边缘并收集硬币前往顶点 NN。遍历一条边需要一分钟,并且每次遍历可以收集沿途放置的硬币。与其他游戏一样,即使你遍历一条边并收集了硬币,下一次遍历该边时也会重新出现相同数量的硬币,你可以再次收集。

当你到达顶点 NN 时,你可以按下按钮结束游戏(你也可以选择离开顶点 NN 而不按下按钮继续旅行)。然而,当你结束游戏时,你将被要求支付 TtimesPT \\times P 枚硬币,其中 TT 是游戏开始后经过的分钟数。如果你的硬币少于 TtimesPT \\times P 枚,你将不得不支付所有的硬币。

你的分数将是支付后剩下的硬币数。判断是否存在可以达到的最大分值。如果答案是肯定的,请找出最大值。

约束条件

  • 2leqNleq25002 \\leq N \\leq 2500
  • 1leqMleq50001 \\leq M \\leq 5000
  • 1leqAi,BileqN1 \\leq A_i, B_i \\leq N
  • 1leqCileq1051 \\leq C_i \\leq 10^5
  • 0leqPleq1050 \\leq P \\leq 10^5
  • 输入中的所有值都是整数。
  • 可以从顶点 11 到达顶点 NN

输入

输入以标准格式给出,格式如下:

NN MM PP A1A_1 B1B_1 C1C_1 :: AMA_M BMB_M CMC_M

输出

如果存在可以达到的最大分值,请输出该最大分值;否则,输出 -1


示例输入 1

3 3 10
1 2 20
2 3 30
1 3 45

示例输出 1

35

Sample Input 1 中给出图的示意图

从顶点 11 到顶点 33 有两种方式:

  • 顶点 1rightarrow2rightarrow31 \\rightarrow 2 \\rightarrow 3:沿途收集 20+30=5020 + 30 = 50 枚硬币。从游戏开始后的两分钟后,你按下按钮,支付 2times10=202 \\times 10 = 20 枚硬币,剩下 5020=3050 - 20 = 30 枚硬币。
  • 顶点 1rightarrow21 \\rightarrow 2:沿途收集 4545 枚硬币。从游戏开始后的一分钟后,你按下按钮,支付 1times10=101 \\times 10 = 10 枚硬币,剩下 4510=3545 - 10 = 35 枚硬币。

因此,可以获得的最大分值是 3535


示例输入 2

2 2 10
1 2 100
2 2 100

示例输出 2

-1

Sample Input 2 中给出图的示意图

从顶点 11 沿着指向顶点 22 的边遍历,然后再通过指向自身的边遍历 tt 次并按下按钮,你的分数将是 90+90t90 + 90t。因此,你的分数可以无限增加,这意味着不存在可以达到的最大分值。


示例输入 3

4 5 10
1 2 1
1 4 1
3 4 1
2 2 100
3 3 100

示例输出 3

0

Sample Input 3 中给出图的示意图

除了直接遍历从顶点 11 到顶点 44 的边缘之外,没有其他方式可以从顶点 11 到达顶点 44。你会在这条边上捡起一枚硬币,但在被要求支付 1010 枚硬币后,你的分数将是 00

请注意,如果你遍历从顶点 11 到顶点 22 的边缘,你可以收集无限多的硬币,但这是没有意义的,因为你无法再到达顶点 44 并结束游戏。