#include<stdio.h> #include<string.h> #include<stdlib.h> int set[110],n,m; struct val { int x,y,v,s; }e[10000]; int cmp(const void *a,const void *b) { return ((val *)a)->v-((val *)b)->v; } int find(int x) { return x==set[x] ? x : find(set[x]); } int kruskal() { int sum=0; int x,y,v,s; for(int i=1;i<=m;i++) { x=e[i].x,y=e[i].y,v=e[i].v,s=e[i].s; if(s==1) { int a=find(x),b=find(y); if(a!=b) { set[a]=b; } } } for(int i=1;i<=m;i++) { x=e[i].x,y=e[i].y,v=e[i].v,s=e[i].s; if(s==0) { int a=find(x),b=find(y); if(a!=b) { set[a]=b; sum+=v; } } } return sum; } int main() { int x,y,v,s; while(scanf("%d",&n),n) { for(int i=1;i<=n;i++) { set[i]=i; } m=(n*(n-1))/2; for(int i=1;i<=m;i++) { scanf("%d%d%d%d",&x,&y,&v,&s); e[i].x=x,e[i].y=y,e[i].v=v,e[i].s=s; } qsort(e+1,m,sizeof(e[0]),cmp); int res=kruskal(); printf("%d\n",res); } // system("pause"); return 0; }