hdu1233
来源:互联网 发布:手机网络监控直播 编辑:程序博客网 时间:2024/05/17 08:31
#include <iostream>#include <cstdio>#include <cstring>const int _max = 0xfffff;const int maxn = 111;int map[maxn][maxn];bool visit[maxn];int dist[maxn];int n;void inint(){ for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) map[i][j] = _max;}void prim(){ for(int i = 2; i <= n; i++) dist[i] = map[1][i]; dist[1] = 0; visit[1] = true; int sum = 0; for(int i = 1; i < n; i++) { int min = _max; int k; for(int j = 1; j <= n; j++) if(!visit[j] && dist[j] < min) { min = dist[j]; k = j; } sum += min; visit[k] = true; for(int j = 1; j <= n; j++) if(!visit[j] && dist[j] > map[k][j]) dist[j] = map[k][j]; } printf("%d\n", sum);}int main(){ while(scanf("%d", &n)!=EOF&&n) { inint(); int u, v, w; for(int i = 0; i < n*(n-1)/2; i++) { scanf("%d%d%d", &u, &v, &w); if(map[u][v] > w) map[u][v] = map[v][u] = w; } memset(visit, false, sizeof(visit)); prim(); }}