KK's Reconstruction

Accepts: 27
Submissions: 78
Time Limit: 12000/6000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
问题描述
我们可爱的KK有一道困难的社会性题目:他所在的地区发生了一场大地震(如此老套的出题思路~!),一共有$N\left( 2\leq N\leq 2000\right)$个城市受到了牵连,$N$个城市间所有道路都已损坏,现在KK受委托要重修这些道路。然而,经过KK的实地考察发现,很多城市间道路的地基都被破坏了,无法再重修道路,因此可供修建的道路只有$M\left( 0\leq M\leq 15000\right)$条。KK要用尽量少的道路将所有的城市联通起来,在此条件下,他希望选择一种方案,使得方案中最贵道路的价格和最便宜道路的价格的差值最小。
输入描述
第一行一个数$T\left( 1\leq T\leq 10\right)$,表示数据组数。
每组数据第一行包含两个整数$N\left( 2\leq N\leq 2000\right)$,$M\left( 0\leq M\leq 15000\right)$,表示城市的个数和可重修的道路条数。
接下来$M$行,每行包含三个整数$a,b,c(a\neq b,1\leq c\leq 2*{10}^{9})$,表示城市$a$,$b$之间可以修建一条价格为$c$的无向道路。
输出描述
对于每一个数据输出一个整数,表示最贵道路的价格和最便宜道路的价格的最小差值,如果不存在合法的方案,则输出-1。
输入样例
2
5 10
1 2 9384
1 3 887
1 4 2778
1 5 6916
2 3 7794
2 4 8336
2 5 5387
3 4 493
3 5 6650
4 5 1422
2 0
输出样例
1686
-1