hdu 1233 还是畅通工程(最小生成树)
2011-09-14 15:05
363 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1233
/* 2011-9-14 author:BearFly1990 */ package acm.hdu.tests; import java.io.BufferedInputStream; import java.util.Arrays; import java.util.Comparator; import java.util.Scanner; public class HDU_1233 { private static final int N = 101; private static Road[] roads = new Road[N*(N-1)/2]; private static int[] x = new int ; public static void main(String[] args) { Scanner in = new Scanner(new BufferedInputStream(System.in)); int n; while(in.hasNext()){ n = in.nextInt(); if(n == 0)break; int m = n*(n-1)/2; for(int i = 0; i <= n; i++){ x[i] = i; } for(int i = 0; i < m; i++){ int tempa = in.nextInt(); int tempb = in.nextInt(); int tempDis = in.nextInt(); roads[i] = new Road(tempa,tempb,tempDis); } Arrays.sort(roads,0,m,new RoadCompare()); int dis = 0; int cnt = 0; for(int i = 0; cnt < n-1 ; i++){ int a = find(roads[i].a); int b = find(roads[i].b); if( a != b){ dis += roads[i].dis; x[a] = b; cnt++; } } System.out.println(dis); } } public static int find(int a) { int t,b = a; while(a != x[a]) a = x[a]; while(b != a){ t = x[b]; x[b] = a; b = t; } return a; } public static class Road{ int a,b,dis; public Road(int a,int b,int dis){ this.a = a; this.b = b; this.dis = dis; } } public static class RoadCompare implements Comparator<Road>{ @Override public int compare(Road r1, Road r2) { return r1.dis - r2.dis; } } }
相关文章推荐
- HDU 1233:还是畅通工程(最小生成树)
- HDU 1233 还是畅通工程(最小生成树入门)
- HDU 1233 还是畅通工程(最小生成树)
- HDU 1233 还是畅通工程(最小生成树 Prim+Kruskal)
- hdu 1233 还是畅通工程(最小生成树)
- HDU 1233 还是畅通工程(最小生成树)
- [ACM] hdu 1233 还是畅通工程(最小生成树)
- hdu 1233 还是畅通工程(最小生成树的Prim和Kruskal两种算法的c++实现)(prim算法详解)
- HDU-1233-还是畅通工程(最小生成树kruscal)
- HDU 1233-还是畅通工程(最小生成树)
- HDU-1233 还是畅通工程 (prim 算法求最小生成树)
- HDU ~ 1233 ~ 还是畅通工程 (最小生成树)
- hdu1233 还是畅通工程(最小生成树 prim 算法)
- HDU - 1233 还是畅通工程(最小生成树)
- HDU 1233 还是畅通工程(最小生成树kruskal)
- hdu 1233 还是畅通工程(最小生成树,kruskal,前向星)
- HDU 1233 还是畅通工程(最小生成树,prim)
- HDU 1233 还是畅通工程(最小生成树)
- HDU 1233 还是畅通工程(最小生成树)
- HDU - 1233 还是畅通工程(最小生成树模板题)