#include<bits/stdc++.h>
using namespace std;
#define MAXN 10010
int m,n,pre[MAXN],ran[MAXN];
struct node{
int a;
int b;
int c;
}s[MAXN];
bool cmp(node a,node b)
{
return a.c<b.c;
}
int find(int x)
{
int t=x;
while(x!=pre[x]) x=pre[x];
if(t!=x)
{
int r=pre[t];
pre[t]=x;
t=r;
}
return x;
}
int un(int a,int b)
{
a=find(a);
b=find(b);
if(a==b)
return 0;
if(ran[a]>=ran[b])
{
pre[b]=a;
ran[a]+=ran[b];
}
else
{
pre[a]=b;
ran[b]+=ran[a];
}
}
int main()
{
int i,j,a,b,c,d;
while(scanf("%d",&n),n)
{
for(i=1;i<=n;i++){
pre[i]=i;
ran[i]=1;
}
m=n*(n-1)/2;
for(i=1;i<=m;i++){
scanf("%d%d%d%d",&s[i].a,&s[i].b,&s[i].c,&d);
if(d==1)
un(s[i].a,s[i].b);
}
sort(s+1,s+1+m,cmp);
int num=0;
for(i=1;i<=m;i++)
if(find(s[i].a)!=find(s[i].b))
{
num+=s[i].c;
un(s[i].a,s[i].b);
}
printf("%d\n",num);
}
}
hdu 1863
最新推荐文章于 2024-09-07 14:26:30 发布