http://acm.hdu.edu.cn/showproblem.php?pid=1233
题目 | 题意 | 备注 |
给出城市间距离,求联通最短距离 | 并查集+快排 | 冒泡超时 |
import java.util.Scanner;
public class Main {
public static void QuickSort(int a[],int b[],int c[],int start,int end){
int lo = start;
int hi = end;
if (lo >= hi)
return;
boolean transfer=true;
while (lo != hi) {
if (a[lo] > a[hi]) {
int temp = a[lo]; a[lo] = a[hi]; a[hi] = temp;
temp = b[lo]; b[lo] = b[hi]; b[hi] = temp;
temp = c[lo]; c[lo] = c[hi]; c[hi] = temp;
transfer = (transfer == true) ? false : true;
}
if(transfer)
hi--;
else
lo++;
}
lo--;
hi++;
QuickSort(a,b,c, start, lo);
QuickSort(a,b,c, hi, end);
}
public static void main(String[] args) {
int m,n,i;
Scanner oo=new Scanner(System.in);
while(oo.hasNext()){
n=oo.nextInt();
if(n==0){break;}
m=n*(n-1)/2;
int a[]=new int[m+1];
int b[]=new int[m+1];
int c[]=new int[m+1];
int f[]=new int[n+1];
for(i=1;i<=n;i++){
f[i]=i;
}
for(i=1;i<=m;i++){
a[i]=oo.nextInt();
b[i]=oo.nextInt();
c[i]=oo.nextInt();
}
QuickSort(c,a,b,1,m);
int fa,fb,min=0;;
for(i=1;i<=m;i++){
fa=a[i];
fb=b[i];
while(fa!=f[fa]){
fa=f[fa];
}
while(fb!=f[fb]){
fb=f[fb];
}
if(fa!=fb){
f[fa]=f[fb];
min=min+c[i];
}
}
System.out.println(min);
}
}
}