http://acm.hdu.edu.cn/showproblem.php?pid=1879
#include<stdio.h>
#include<string.h>
#define MAX 0x3f3f3f
#define N 110
int graph[N][N],visited[N],ps[N],a[N][N];
int cmp(int m)
{
int i,j;
int min,pos,sum=0;
int tem;
memset(visited,0,sizeof(visited));
pos=1;
visited[1]=1;
for(i=2;i<=m;i++)
ps[i]=graph[pos][i];
for(i=1;i<m;i++)
{
min=MAX;
for(j=1;j<=m;j++)
{
if(!visited[j]&&ps[j]<min)
{
min=ps[j];
pos=j;
}
}
if(!a[pos][tem])
sum+=min;
visited[pos]=1;
for(j=2;j<=m;j++)
{
if(!visited[j]&&graph[pos][j]<ps[j])
ps[j]=graph[pos][j];
}
}
printf("%d\n",sum);
return 0;
}
int main()
{
int n,m,i,j,t1,t2,x,y;
int s,money;
int bl;
while(scanf("%d",&n),n)
{
s=0;
memset(graph,MAX,sizeof(graph));
for(i=0;i<n*(n-1)/2;i++)
{
scanf("%d%d%d%d",&x,&y,&money,&bl);
graph[x][y]=graph[y][x]=money;
if(bl) //如果某条路已经修好,就将这条路的权值标记为0!!!
graph[x][y]=graph[y][x]=0;
}
cmp(n);
}
return 0;
}