http://acm.hdu.edu.cn/showproblem.php?pid=1102
题目 | 算法 | 备注 |
给出邻接链表,给出已经建好的路,求连通成本 | prime算法 最小生成树 | |
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int n,i,j,q,q1,q2,min,u;
Scanner oo=new Scanner(System.in);
while(oo.hasNext()){
n=oo.nextInt();
int a[][]=new int[n+1][n+1];
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
a[i][j]=oo.nextInt();
}
}
q=oo.nextInt();
for(i=0;i<q;i++){
q1=oo.nextInt();
q2=oo.nextInt();
a[q1][q2]=0;
a[q2][q1]=0;
}
int d[]=new int[n+1];
for(i=1;i<=n;i++){
d[i]=a[1][i];
}
boolean f[]=new boolean[n+1];
u=0;min=200000;
int tree=0;
for(i=0;i<n;i++){
min=200000;
for(j=1;j<=n;j++){
if(f[j]==false&&d[j]<min){
min=d[j];
u=j;
}
}
tree=tree+min;
f[u]=true;
for(j=1;j<=n;j++){
if(f[j]==false&&a[u][j]<d[j]){
d[j]=a[u][j];
}
}
}
System.out.println(tree);
}
}
}