hihocoder 1109 : 最小生成树三·堆优化的Prim算法
2017-07-23 15:37
239 查看
<
4000
div class="limit">
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
回到两个星期之前,在成功的使用Kruscal算法解决了问题之后,小Ho产生了一个疑问,究竟这样的算法在稀疏图上比Prim优化之处在哪里呢?
提示:没有无缘无故的优化!
每个测试点(输入文件)有且仅有一组测试数据。
在一组测试数据中:
第1行为2个整数N、M,表示小Hi拥有的城市数量和小Hi筛选出路线的条数。
接下来的M行,每行描述一条路线,其中第i行为3个整数N1_i, N2_i, V_i,分别表示这条路线的两个端点和在这条路线上建造道路的费用。
对于100%的数据,满足N<=10^5, M<=10^6,于任意i满足1<=N1_i, N2_i<=N, N1_i≠N2_i, 1<=V_i<=10^3.
对于100%的数据,满足一定存在一种方案,使得任意两座城市都可以互相到达。
对于每组测试数据,输出1个整数Ans,表示为了使任意两座城市都可以通过所建造的道路互相到达至少需要的建造费用。
样例输入
样例输出
EmacsNormalVim
4000
div class="limit">
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
回到两个星期之前,在成功的使用Kruscal算法解决了问题之后,小Ho产生了一个疑问,究竟这样的算法在稀疏图上比Prim优化之处在哪里呢?提示:没有无缘无故的优化!
输入
每个测试点(输入文件)有且仅有一组测试数据。在一组测试数据中:
第1行为2个整数N、M,表示小Hi拥有的城市数量和小Hi筛选出路线的条数。
接下来的M行,每行描述一条路线,其中第i行为3个整数N1_i, N2_i, V_i,分别表示这条路线的两个端点和在这条路线上建造道路的费用。
对于100%的数据,满足N<=10^5, M<=10^6,于任意i满足1<=N1_i, N2_i<=N, N1_i≠N2_i, 1<=V_i<=10^3.
对于100%的数据,满足一定存在一种方案,使得任意两座城市都可以互相到达。
输出
对于每组测试数据,输出1个整数Ans,表示为了使任意两座城市都可以通过所建造的道路互相到达至少需要的建造费用。样例输入
5 29 1 2 674 2 3 249 3 4 672 4 5 933 1 2 788 3 4 147 2 4 504 3 4 38 1 3 65 3 5 6 1 5 865 1 3 590 1 4 682 2 4 227 2 4 636 1 4 312 1 3 143 2 5 158 2 3 516 3 5 102 1 5 605 1 4 99 4 5 224 2 4 198 3 5 894 1 5 845 3 4 7 2 4 14 1 4 185
样例输出
92
import java.util.ArrayList; import java.util.List; import java.util.PriorityQueue; import java.util.Scanner; public class Main { static class Edge implements Comparable<Edge>{ int from,to; int dis; public Edge(int from, int to, int dis) { this.from = from; this.to = to; this.dis = dis; } @Override public int compareTo(Edge o) { return this.dis-o.dis; } } public int prim(List<Edge>[] graph,int start){ boolean[] visited=new boolean[graph.length]; PriorityQueue<Edge> queue=new PriorityQueue<Edge>(); for(int i=0;i<graph[start].size();i++){ queue.add(graph[start].get(i)); } visited[start]=true; int re=0; while(!queue.isEmpty()){ Edge edge=queue.poll(); if(visited[edge.to]) continue; visited[edge.to]=true; re+=edge.dis; for(int i=0;i<graph[edge.to].size();i++){ int x=graph[edge.to].get(i).to; if(!visited[x]) queue.add(graph[edge.to].get(i)); } } return re; } public static void main(String[] args) { Main main=new Main(); Scanner scan=new Scanner(System.in); int num=scan.nextInt(); List<Edge>[] graph=new ArrayList[num]; for(int i=0;i<graph.length;i++) graph[i]=new ArrayList<Edge>(); int count=scan.nextInt(); for(int i=0;i<count;i++){ int x=scan.nextInt(); int y=scan.nextInt(); int dis=scan.nextInt(); graph[x-1].add(new Edge(x-1,y-1,dis)); graph[y-1].add(new Edge(y-1,x-1,dis)); } System.out.println(main.prim(graph,0)); } }
EmacsNormalVim
相关文章推荐
- hihoCoder 1109 最小生成树三·堆优化的Prim算法
- hihocoder1097、1109最小生成树(prim算法+堆优化)
- HIHO #1109 : 最小生成树三·堆优化的Prim算法
- #1109 : 最小生成树三·堆优化的Prim算法
- hihoCoder#1109 最小生成树三·堆优化的Prim算法
- prim算法最小生成树(优化)
- hihocoder hiho一下 第二十六周 最小生成树一·(Prim算法)
- hihoCoder 1097 : 最小生成树一·Prim算法
- hihoCoder 1097 : 最小生成树一·Prim算法
- [HihoCoder]#1097 : 最小生成树一·Prim算法
- hiho一下 第二十九周 最小生成树三·堆优化的Prim算法【14年寒假弄了好长时间没搞懂的prim优化:prim算法+堆优化 】
- hdu1233 还是畅通工程 最小生成树 Prim算法堆优化
- hihocoder(1109) 堆优化的Prim算法
- hihocoder #1109 最小生成树三·堆优化的Prim算法
- 最小生成树Prim算法 堆优化
- 最小生成树(二)--prim算法实现以及堆优化
- B - Networking——最小生成树_Prim算法(未堆优化)
- hihoCoder - hiho一下 第二十六周 - A - 最小生成树一·Prim算法
- hihoCoder1097 1098 1109:最小生成树
- hiho 29 最小生成树三·堆优化的Prim算法