嗯 水水的
#include <cstdio>
#include <cmath>
#include<iostream>
#include <algorithm>
using namespace std;
const int maxn = 10000+10;
int pre[maxn];
int n,m;
struct node
{
int st;
int ed;
int dis;
}s[maxn];
int cmp(node a,node b)
{
return a.dis<b.dis;
}
int find(int x)
{
if(pre[x]!=x)
pre[x]=find(pre[x]);
return pre[x];
}
int join(node a)
{
int x=find(a.st);
int y=find(a.ed);
if(x!=y)
{
pre[x]=y;
return a.dis;
}
return 0 ;
}
int kruskal(int n,int m)
{
int ans=0;
for(int i=1;i<=n;i++)
pre[i]= i;
sort(s,s+m,cmp);
for(int i=0;i<m;i++)
ans+=join(s[i]);
return ans;
}
int main()
{
while(scanf("%d", &n)!=EOF&&n!=0)
{
int x;
m=n*(n-1)/2;
for(int i=0;i<m;i++)
{
scanf("%d%d%d%d",&s[i].st, &s[i].ed,&s[i].dis,&x);
if(x==1)
s[i].dis=0;
}
printf("%d\n",kruskal(n,m) );
}
return 0;
}