POJ 1258
#include <iostream>
#include <string.h>
#define INF 0x3f3f3f3f
using namespace std;
const int maxn = 1e3;
int a[maxn][maxn];
int vis[maxn];
int dist[maxn];
int n,m;
void prim() {
memset(vis, 0 ,sizeof vis);
vis[1] = 1;
for (int i=1; i<=n; i++) dist[i] = a[1][i];
long long sum = 0;
for (int i=1; i<n; i++) {
long long minn = INF;
int point = INF;
for (int i=1; i<=n; i++) {
if (!vis[i] && dist[i]<minn ) {
point = i;
minn = dist[i];
}
}
vis[point] = true;
sum += dist[point];
for (int i=1; i<=n; i++) {
if ( !vis[i] && a[point][i]<dist[i] )
dist[i] = a[point][i];
}
}
printf("%d\n",sum);
}
int main() {
while (scanf("%d",&n) != EOF) {
memset(a,0x3f,sizeof a);
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++) {
scanf("%d",&a[i][j]);
}
prim();
}
return 0;
}