# include <stdio.h>
# include <stdlib.h>
int father[105];
int map[5005][3];
int cmp(const void *a,const void * b)
{ return *(int *)a-*(int *)b;}
int find(int x)
{ return x==father[x]?x:father[x]=find(father[x]);}
int main ()
{
int n;
while(scanf("%d",&n)!=EOF&&n)
{
int i=0,cnt=0;
int a,b,c,d,e;
for(i=0;i<105;i++)
father[i]=i;
for(i=0;i<n*(n-1)/2;i++)
{
scanf("%d %d %d %d",&a,&b,&c,&e);
if(e==1)
map[cnt][0]=0;
else
map[cnt][0]=c;
map[cnt][1]=a;
map[cnt][2]=b;
cnt++;
}
qsort(map,cnt,sizeof(int)*3,cmp);
int sum=0,num=0;
for(i=0;i<n*(n-1)/2&&num<=n-1;i++)
{
a=find(map[i][1]);
b=find(map[i][2]);
if(a==b) continue;
else father[a]=b;
sum+=map[i][0];
num++;
}
printf("%d\n",sum);
}
return 0;
}
n*(n-1)/2 下次最好用数组存 注意快排的使用方法
hdu 1879 继续畅通工程
最新推荐文章于 2020-02-04 11:17:35 发布