ccf認證交通規劃0分
阿新 • • 發佈:2019-02-16
試題編號: | 201609-4 |
試題名稱: | 交通規劃 |
時間限制: | 1.0s |
記憶體限制: | 256.0MB |
問題描述: |
問題描述
G國國王來中國參觀後,被中國的高速鐵路深深的震撼,決定為自己的國家也建設一個高速鐵路系統。 建設高速鐵路投入非常大,為了節約建設成本,G國國王決定不新建鐵路,而是將已有的鐵路改造成高速鐵路。現在,請你為G國國王提供一個方案,將現有的一部分鐵路改造成高速鐵路,使得任何兩個城市間都可以通過高速鐵路到達,而且從所有城市乘坐高速鐵路到首都的最短路程和原來一樣長。請你告訴G國國王在這些條件下最少要改造多長的鐵路。 輸入格式 輸入的第一行包含兩個整數n, m 接下來m行,每行三個整數a, b, c,表示城市a和城市b之間有一條長度為c的雙向鐵路。這條鐵路不會經過a和b以外的城市。 輸出格式 輸出一行,表示在滿足條件的情況下最少要改造的鐵路長度。 樣例輸入 4 5 1 2 4 1 3 5 2 3 2 2 4 3 3 4 2 樣例輸出 11 評測用例規模與約定 對於20%的評測用例,1 ≤ n ≤ 10,1 ≤ m ≤ 50; 對於50%的評測用例,1 ≤ n ≤ 100,1 ≤ m ≤ 5000; 對於80%的評測用例,1 ≤ n ≤ 1000,1 ≤ m ≤ 50000; 對於100%的評測用例,1 ≤ n |
import java.util.ArrayDeque; import java.util.ArrayList; import java.util.List; import java.util.Queue; import java.util.Scanner; public class Main1 { static int INT_MAX=10000; public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int v=scanner.nextInt(); int e=scanner.nextInt(); Vex[] vex=new Vex[v+1]; for (int i = 1; i <= v; i++) { vex[i]=new Vex(); } for (int i = 0; i < e; i++) { int from=scanner.nextInt(); int to=scanner.nextInt(); int cost=scanner.nextInt(); Edge edge=new Edge(to, cost); vex[from].edges.add(edge); edge=new Edge(from, cost); vex[to].edges.add(edge); } int cost=dijkstra(1,vex,v); System.out.println(cost); } public static int dijkstra(int start,Vex[] vex,int v){ int lowcost=0; int[] visited=new int[v+1]; int[] dist=new int[v+1]; int[] cost=new int[v+1]; for (int i = 1; i <=v; i++) { dist[i]=INT_MAX; cost[i]=INT_MAX; } dist[start]=0; cost[start]=0; Queue<Integer> queue=new ArrayDeque<>(); queue.add(start); while (!queue.isEmpty()) { int node=queue.poll(); while (visited[node]!=1) { visited[node]=1; for (Edge edge : vex[node].edges) { int to=edge.to; if (visited[to]==1) { continue; } int tempcost=edge.cost; int tempdist=dist[node]+tempcost; if (tempdist<dist[to]) { dist[to]=tempdist; cost[to]=tempcost; queue.add(to); }else if (tempdist==dist[to]) { if (tempcost<cost[to]) { cost[to]=tempcost; } } } } } for (int i = 2; i <=v; i++) { lowcost=lowcost+cost[i]; } return lowcost; } } class Vex{ List<Edge> edges; public Vex(){ edges=new ArrayList<Edge>(); } } class Edge{ int to; int cost; public Edge(int t,int c){ to=t; cost=c; } }