您的位置:首页 > 其它

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;
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: