http://acm.hdu.edu.cn/showproblem.php?pid=1233
Problem : 1233 ( 还是畅通工程 ) Judge Status : Accepted
RunId : 18937074 Language : G++ Author : 311309030328
Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta
//1233
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 110
#define INF 999999
int edge[MAXN][MAXN];
int lowcost[MAXN];
int visit[MAXN];
int n;
int prim(int n)
{
int i,j,k,min,sum=0;
for(i=1;i<=n;i++)
{
lowcost[i]=edge[i][1];
visit[i]=0;
}
for(i=1;i<n;i++)
{
min =INF;
for(j=2;j<=n;j++)//j=2 bug
{
if(!visit[j] && lowcost[j]<min)
{
min=lowcost[j];
k=j;
}
}
visit[k]=1;
sum+=min;
for(j=1;j<=n;j++)
{
if(!visit[j] && edge[k][j]<lowcost[j])
{
lowcost[j]=edge[k][j];
}
}
}
return sum;
}
int main()
{
while(~scanf("%d",&n),n)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==j)
{
edge[i][j]=0;
}
else
{
edge[i][j]=INF;
}
}
}
int a,b,c,m;
m=n*(n-1)/2;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
if(c<edge[a][b])//
{
edge[a][b]=edge[b][a]=c;
}
}
printf("%d\n",prim(n));
}
return 0;
}