#include<cstdio> #include<algorithm> using namespace std; struct vi { int start; int end; int cost; }edge[5000],et; int p[100]; int Find(int n) { return n==p[n]?n:p[n]=Find(p[n]); } bool cmp(vi a,vi b) { return a.cost<b.cost; } int main() { int n,i,k,sum,ST,EN,a,b,c,d; while(scanf("%d",&n)!=EOF,n) { for(i=1;i<=n;i++) p[i]=i; for(k=i=0;i<n*(n-1)/2;i++) { scanf("%d%d%d%d",&a,&b,&c,&d); if(d) p[Find(a)]=Find(b); else { et.start=a; et.end=b; et.cost=c; edge[k++]=et; } } sort(edge,edge+k,cmp); for(sum=i=0;i<k;i++) { ST=Find(edge[i].start); EN=Find(edge[i].end); if(ST!=EN) { p[ST]=EN; sum+=edge[i].cost; } } printf("%d\n",sum); } return 0; } /************************************************************** Problem: 2205 User: admin Language: C++ Result: Accepted Time:11 ms Memory:1208 kb ****************************************************************/