#895. 青蛙跳(jump)

青蛙跳(jump)

本题需要文件读写

文件 IO 为:输入文件 jump.in,输出文件 jump.out。请使用上述文件名读入和输出。

题目描述

小灰灰在河边捡到了一只青蛙,小蓝嫌弃它太胖,于是给它安排了如下锻炼。

小灰灰设置一张 nn 个结点 mm 条边的有向图,其中第 ii 个点编号为 ii,第 ii 条边从结点 uiu_i 指向结点 viv_i,这条边的长度为 lenilen_i。

小蓝把青蛙放在了结点 11,当青蛙跳到其指定的结点时就结束了锻炼。

青蛙具有一个初始跳跃能力 kk 和健康状态 d=1d = 1,它每完成一次跳跃能够使得自己的跳跃能力提升 dd 点,然后使自己的健康状态提升 11 点(也就是第 ii 次跳跃时能力增加 ii 点)。

请注意青蛙只能从一个结点跳跃到相邻的另一个结点,且需要满足链接这两个结点的边长度不超过青蛙当前的跳跃能力。

小灰灰捡的青蛙很聪明,但很懒。所以它会选择一个总跳跃次数最少的路径从点 11 到终点。由于终点并不确定,现在,请你求解从结点 11 到每个结点的最少跳跃次数。

特别地,对于某个结点如果不存在任何成功跳跃路径,输出 −1-1。

输入格式

第一行输入三个整数 n,m,kn, m, k。

接下来 mm 行,第 ii 行输入三个整数 ui,vi,leniu_i, v_i, len_i。

输出格式

输出一行 nn 个整数,第 ii 个整数表示从 11 开始跳跃到结点 ii 所需要的最少跳跃次数。若无法到达则输出 −1-1。

样例1

8 11 2
1 2 5
1 5 2
5 2 4
5 3 1
3 4 5
4 6 8
6 5 1
2 7 8
3 1 4
6 7 15
8 1 1
0 4 2 3 1 4 5 -1

样例 1 解释

初始时,青蛙在点 11,跳跃能力为 22。

按该方式跳跃 11 步即可到达点 55:1 5\texttt{1 5}。

按该方式跳跃 22 步即可到达点 33:1 5 3\texttt{1 5 3}。

按该方式跳跃 33 步即可到达点 44:1 5 3 4\texttt{1 5 3 4}。

按该方式跳跃 22 步即可到达点 22:1 5 3 1 2\texttt{1 5 3 1 2}。

按该方式跳跃 44 步即可到达点 66:1 5 3 4 6\texttt{1 5 3 4 6}。

按该方式跳跃 55 步即可到达点 77:1 5 3 1 2 7\texttt{1 5 3 1 2 7}。

样例2

见选手目录下 jump/jump2.in\texttt{jump/jump2.in} 和 jump/jump2.ans\texttt{jump/jump2.ans},该测试用例满足测试点 1∼31 \sim 3 的约束条件。

样例3

见选手目录下 jump/jump3.in\texttt{jump/jump3.in} 和 jump/jump3.ans\texttt{jump/jump3.ans},该测试用例满足测试点 4∼64 \sim 6 的约束条件。

样例4

见选手目录下 jump/jump4.in\texttt{jump/jump4.in} 和 jump/jump4.ans\texttt{jump/jump4.ans},该测试用例满足测试点 13∼1813 \sim 18 的约束条件。

数据范围

对于 100%100\% 的数据:

保证:

  • 1≤n≤1051 \le n \le 10^5
  • 1≤m≤2×1051 \le m \le 2 \times 10^5
  • 1≤ui,vi≤n1 \le u_i, v_i \le n
  • 1≤leni,k≤1051 \le len_i, k \le 10^5
  • 图上没有重边和自环

各测试点的附加限制如下表所示:

测试点编号 特殊性质
1∼31 \sim 3 A
4∼64 \sim 6 B
7∼127 \sim 12 C
13∼1813 \sim 18 无
19∼2019 \sim 20

特殊性质 A:ui<viu_i< v_i。

特殊性质 B:leni=1len_i = 1。

特殊性质 C:n≤104n\le 10^4 且 leni,ki≤100len_i,k_i\le 100 。

点击下载大样例