#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();
}
}
hdu1233
最新推荐文章于 2021-05-13 19:40:06 发布