#include<stdio.h> #define MAX_VERTEX_NUM 100 int parent[MAX_VERTEX_NUM]; typedef struct { int weight; int begin; int end; }Edge; int Find(int *parent,int f) { while(parent[f]>0) f=parent[f]; return f; } int main() { int N,num,k=0,sum=0,m,n; Edge edges[MAX_VERTEX_NUM*MAX_VERTEX_NUM],temp; scanf("%d",&N); for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { scanf("%d",&num); if(num!=0&&i<j) { edges[k].weight=num; edges[k].begin=i; edges[k].end=j; k++; } } } for(int i=0;i<k;i++) { for(int j=i;j<k;j++) { if(edges[i].weight>edges[j].weight) { temp.weight=edges[i].weight; temp.begin=edges[i].begin; temp.end=edges[i].end; edges[i].weight=edges[j].weight; edges[i].begin=edges[j].begin; edges[i].end=edges[j].end; edges[j].weight=temp.weight; edges[j].begin=temp.begin; edges[j].end=temp.end; } } } for(int i=0;i<N;i++) { parent[i]=0; } for(int i=0;i<k;i++) { n=Find(parent,edges[i].begin); m=Find(parent,edges[i].end); if(n!=m) { parent[n]=m; sum+=edges[i].weight; } } printf("%d\n",sum); return 0; } /************************************************************** Problem: 2162 User: admin Language: C Result: Accepted Time:8 ms Memory:1144 kb ****************************************************************/