#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
#define N 55
#define INF 99999999
int n, m;
int vis[N];
int dis[N];
int mp[N][N];
int prim()
{
int i, j, p;
int min, res = 0;
memset(vis, 0, sizeof(vis));
vis[1] = 1;
for (i = 1; i <= n; i++)
dis[i] = mp[1][i];
for (i = 1; i < n; i++)
{
min = INF;
p = -1;
for (j = 1; j <= n; j++)
if (!vis[j] && min > dis[j])
{
min = dis[j];
p = j;
}
if (INF == min)
return -1;
res += min;
vis[p] = 1;
for (j = 1; j <= n; j++)
if (!vis[j] && dis[j] > mp[p][j])
dis[j] = mp[p][j];
}
return res;
}
int main()
{
while (scanf("%d", &n), n)
{
scanf("%d", &m);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
mp[i][j] = INF;
for (int i = 1; i <= m; i++)
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
if (mp[a][b] > c)
mp[a][b] = mp[b][a] = c;
}
printf("%d\n", prim());
}
return 0;
}
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
#define N 105
struct node
{
int u,v,w;
};
node mp[N*N];
int st[N];
int n,m;
bool cmp(node a,node b)
{
return a.w<b.w;
}
int find(int x)
{
return x == st[x] ? st[x] :find (st[x]);
}
void kuska()
{
int i,j,k,sum=0;
for(i=0,j=1;i<m && j<n;i++)
{
int a=mp[i].u,b=mp[i].v ,c=mp[i].w;
a=find(a);
b=find(b);
if(a!=b)
{
j++;
sum+=c;
st[a]=b;
}
}
cout<<sum<<endl;
}
int main()
{
int i,j;
while(cin>>n,n)//n点,m边
{
cin>>m;
for(i=0;i<=n;i++)
st[i]=i;
for(i=0;i<m;i++)
cin>>mp[i].u>>mp[i].v>>mp[i].w;
sort(mp,mp+m,cmp);
kuska();
}
return 0;
}
#include #include #include #include using namespace std;#define N 55#define INF 99999999int n, m;int vis[N];int dis[N];int mp[N][N];int prim(){ int i, j, p; int min, res = 0;