/*Networking 最小生成树
2008-09-02 20:13:14 Accepted 1372 C++ 00:00.03 852K 天将降大任于我
*/
#include<iostream>
using namespace std;
const int N=50;
int s[N+2][N+2];bool check[N+2];
int main()
{
int p,r,i,j,a,b,c,Min,t,sum;
while(scanf("%d",&p)!=EOF)
{
if(p==0) break;
scanf("%d",&r);
if(r==0) {printf("0\n");continue;}
memset(s,102,sizeof(s));
for(i=0;i<r;i++)
{
scanf("%d%d%d",&a,&b,&c);
if(s[a][b]>c) {s[a][b]=c;s[b][a]=c;} //输入时有重复的边但是权值大的舍去
}
memset(check,0,sizeof(check));
check[1]=1;sum=0;
for(int k=1;k<p;k++) //总共有p-1条边
{
Min=101;
for(i=1;i<=p;i++) //从第一个结点开始寻找与第一个结点相邻接的最小的权值,并记下该权值对应的结点
if(check[i])
for(j=1;j<=p;j++)
{
if(!check[j]&&s[i][j]<Min)
{ Min=s[i][j]; t=j;
}
}
sum+=Min;check[t]=1;
}
printf("%d\n",sum);
}
return 0;
}
心难泰,世风坏,旧时正气今何在?正义寡,人情薄,闻道虽多,茅塞不开。怪!怪!怪!
空等待,几多载,冲出重围人心快!暴雨打,狂风袭,任他折磨,此志难改。耐!耐!耐!