1 #include <cstdio> 2 #include <cstring> 3 using namespace std; 4 int sum; 5 int map[101][101]; 6 bool vis[101]; 7 int des[101]; 8 9 void prim(int v,int e) 10 { 11 int i,j; 12 memset(vis,0,sizeof(vis)); 13 for(i=1;i<=v;i++) 14 des[i]=map[1][i]; 15 vis[1]=1; 16 des[1]=0; 17 int num=1; 18 while(num<v) 19 { 20 int min=999999,k; 21 for(i=2;i<=v;i++) 22 { 23 if(des[i]<min&&vis[i]==0) 24 { 25 min=des[i]; k=i; 26 } 27 } 28 sum+=min; 29 vis[k]=1; 30 num++; 31 for(i=2;i<=v;i++) 32 if(map[k][i]<des[i]&&vis[i]==0) 33 des[i]=map[k][i]; 34 } 35 } 36 37 38 int main() 39 { 40 int n; 41 scanf("%d",&n); 42 for(int i=1;i<=n;i++) 43 for(int j=1;j<=n;j++) 44 { 45 scanf("%d",map[i]+j); 46 } 47 int e=0; 48 for(int i=1;i<=n;i++) 49 for(int j=1;j<=j;j++) 50 if(map[i][j]) 51 e++; 52 sum=0; 53 prim(n,e); 54 printf("%d ",sum); 55 return 0; 56 } 57