题目1 : 货运费用
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
H国有N座城市,编号1~N。城市间有M条双向的高速公路相连。每条公路都有一个车辆的最大总重限制,总重超过限制的车辆不能在该条公路上行驶。
现在小Hi希望将一批物资从1号城市运送到N号城市,货车总重是W。每经过一条公路需要缴纳1元的过路费,请你计算小Hi最少需要缴纳多少费用。
输入
第一行包含3个整数N、M和W。
以下M行每行包含3和整数A、B和L。表示这条公路连接A号城市和B号城市,重量限制是L。
1 ≤ N ≤ 1000 1 ≤ M ≤ 500000 1 ≤ L, W ≤ 10000
输出
一个整数表示答案。如果不能到达N号城市,输出-1。
样例输入
3 3 86
1 2 100
2 3 100
1 3 50
样例输出
2
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Scanner;/**
*
* @author dell
*/
public class Main {/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int M = in.nextInt();
int W = in.nextInt();
Node[] nodes = new Node[N + 1];
for(int i = 1; i <= N; i++) {
nodes[i] = new Node();
nodes[i].id = i;
}
for(int i = 1; i <= M; i++) {
int a = in.nextInt();
int b = in.nextInt();
int l = in.nextInt();
nodes[a].friends.add(b);
nodes[a].costs.add(l);
nodes[b].friends.add(a);
nodes[b].costs.add(l);
}
LinkedList<Integer> list = new LinkedList<Integer>();
nodes[1].dist = 0;
list.add(1);
while(!list.isEmpty()) {
int node_id = list.pollFirst();
for(int i = 0; i < nodes[node_id].friends.size(); i++) {
int tmp_w = nodes[node_id].costs.get(i);
int next_id = nodes[node_id].friends.get(i);
if(tmp_w < W) continue;
if(nodes[node_id].dist + 1 < nodes[next_id].dist) {
nodes[next_id].dist = nodes[node_id].dist + 1;
list.add(next_id);
}
}
}
if(nodes[N].dist == Integer.MAX_VALUE) {
System.out.println(-1);
} else {
System.out.println(nodes[N].dist);
}
}
}class Node {
int id;
ArrayList<Integer> friends = new ArrayList<Integer>();
ArrayList<Integer> costs = new ArrayList<Integer>();
int dist = Integer.MAX_VALUE;
}