#P5251. 「2019-03-10提高模拟赛」最短路(sssp)
「2019-03-10提高模拟赛」最短路(sssp)
Description
推土机,沾沾自喜耳,多易。
在提高模拟赛爆零后,Tweetuzki 开始怀疑自己。
他想起了自己曾经秒切图论题的辉煌。在那个时候,对于什么最短路,生成树,二分图,网络流的模板题…… Tweetuzki 都是随便做的呢。
但是他实在缺乏创新能力。他只知道根据套路做题,对于考思路的题目,就像阿喀琉斯之踵,Tweetuzki 瞬间变得不堪一击。
就拿最短路来说吧。相信大家都知道,对于一张 个点 条边,边有边权的有向图,可以直接通过 Dijkstra 算法得到 号点到其他点的最短路长度。
但是现在 Tweetuzki 得到了一个长度为 的数组 ,其中第 个数 表示 号点到 号点的距离。他被要求构造出一张 条边的有向图,其中要求 不超过 且每条边的长度不超过一个给定的值 。
Tweetuzki 冥思苦想,久久不得解。于是他找到的你 —— F 市著名的程序员。你能帮助 Tweetuzki 解决这个问题吗?
Input Format
从文件 sssp.in
中读入。
输入文件将会遵循以下格式:
第一行两个整数 ,表示点数和限制的边权最大值。
第二行 个非负整数,第 个数为 ,表示点 到点 的最短距离。
Output Format
输出到文件 sssp.out
中。
若可以构造这样一张图,第一行输出一个数 ,表示这张图的边数。
接下来 行,每行三个正整数 ,表示有一条从 到 权值为 的边。
若不能构造这样一张图,只需输出 。
输出要求
本题可能有多种答案,我们会使用 Special Judge 来检验你的答案是否正确。
若本数据点无解并且你判断对了,会得到该测试点的满分。
若该测试点有解但你输出了 ,将会判作答案错误。
如果你判断对了该测试点有解,则 Special Judge 会根据你的输出运行 Dijkstra 算法,求出 号点所有点的最短路。之后将得到的最短路数组与输入文件给出的数组进行比对,只要有一个同位元素不同,或者在你给出的图中有一个点不可达,则会被判作答案错误。若得到的数组一模一样,可以得到该测试点的满分。
为了防止 Special Judge 出现问题,对于输出格式,我们给出以下规定:
-
若无解,则只需输出一行一个数 。
-
否则,你输出的数必须都是正整数,且:
-
对于输出数据中的 ,应当满足 。
-
对于输出数据中所有的 ,应当满足 。
-
对于输出数据中所有的 ,应当满足 。
-
输出数据第一行必须是一个数 ,之后必须刚好 行,每行三个正整数 , , 。
若你的输出不满足输出格式,仍然会被判作答案错误。
Sample
样例输入 1
4 5
0 4 2 9
样例输出 1
4
1 2 4
1 3 2
3 2 5
2 4 5
样例输入 2
4 4
0 4 2 9
样例输出 2
-1
Hint
Subtask #1 (30 points):保证对于任意的 ,。
Subtask #2 (20 points):保证不能构造这样的一张图。
Subtask #3 (50 points):无特殊限制。