最小生成树的模板;
//从别人那里偷看来的:
//嘻嘻
//下面是我偷看的地址,那里有比较详细的解释O.O,不过他的题目和我的题目是不一样的,但是也没什么本质上的区别;
http://www.cnblogs.com/Veegin/archive/2011/04/29/2032388.html
不用C的输入输出会超时哦;
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
#define MaxInt 0x3f3f3f3f;
int n;
int map[101][101],low[101],visit[101];
int prim()
{
int i,j,pos,result=0;
memset(visit,0,sizeof(visit));
visit[1]=1;
pos=1;
for(i=1;i<=n;i++)
{
if(i!=pos)
{
low[i]=map[pos][i];
}
}
for(i=1;i<n;i++)
{
int min= MaxInt;
for(j=1;j<=n;j++)
{
if(visit[j]==0&&min>low[j])
{
min=low[j];
pos=j;
}
}
result+=min;
visit[pos]=1;
for(j=1;j<=n;j++)
{
if(visit[j]==0&&low[j]>map[pos][j])
low[j]=map[pos][j];
}
}
return result;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
int m=n*(n-1)/2,i,j,a,b,c;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
map[i][j]=MaxInt;
}
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
map[a][b]=c;
map[b][a]=c;
}
int ans=prim();
printf("%d\n",ans);
}
}