题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1879
题解:已修建道路,边权值赋值0
#include <stdio.h>
#include <string.h>
#define MAXN 102
#define INF 9999999
int mp[MAXN][MAXN],visited[MAXN],dist[MAXN];
int prim(int n)
{
int i,j,min,pos,sum=0;
for(i=0;i<=n;++i)
{
dist[i]=mp[1][i];
visited[i]=0;
}
visited[1]=1;
dist[1]=0;
for(i=2;i<=n;++i)
{
min=INF;
for(j=1;j<=n;++j)
if(!visited[j]&&dist[j]<min)
{
min=dist[j];
pos=j;
}
sum+=dist[pos];
visited[pos]=1;
for(j=1;j<=n;++j)
{
if(!visited[j]&&dist[j]>mp[pos][j])
dist[j]=mp[pos][j];
}
}
return sum;
}
int main()
{
int n,N,u,v,val,flag,i;
while(scanf("%d",&n)&&n)
{
N=n*(n-1)/2;
memset(mp,INF,sizeof(mp));
for(i=0;i<N;++i)
{
scanf("%d %d %d %d",&u,&v,&val,&flag);
if(flag)
mp[u][v]=mp[v][u]=0;
else
{
if(mp[u][v]>val)
mp[u][v]=mp[v][u]=val;
}
}
printf("%d\n",prim(n));
}
return 0;
}