#895. 青蛙跳(jump)

青蛙跳(jump)

题目描述

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

小灰灰设置一张 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 步即可到达点 551 5\texttt{1 5}

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

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

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

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

按该方式跳跃 55 步即可到达点 771 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},该测试用例满足测试点 131 \sim 3 的约束条件。

样例3

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

样例4

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

数据范围

对于 100%100\% 的数据:

保证:

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

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

测试点编号 特殊性质
131 \sim 3 A
464 \sim 6 B
7127 \sim 12 C
131813 \sim 18
192019 \sim 20

特殊性质 A:ui<viu_i< v_i

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

特殊性质 C:n104n\le 10^4leni,ki100len_i,k_i\le 100

点击下载大样例