1 #include <iostream>
2 #include <cstdio>
3 #include <cstdlib>
4 #include <cstring>
5 #include <cmath>
6 #include <cctype>
7 #include <vector>
8 #include <list>
9 #include <deque>
10 #include <stack>
11 #include <queue>
12 #include <map>
13 #include <set>
14 #include <string>
15 #include <algorithm>
16
17 #define MAXD 99999999
18 using namespace std;
19
20
21 int fa[1000];
22
23 struct Node{
24 int v1,v2;
25 int cost;
26 };
27
28 vector<Node>vt;
29
30
31 bool cmp(Node x,Node y)
32 {
33 if(x.cost<y.cost)
34 return true;
35 return false;
36 }
37
38 int findfa(int v)
39 {
40 while(fa[v]>0)
41 {
42 v=fa[v];
43 }
44 return v;
45 }
46
47
48
49
50
51
52
53 int main()
54 {
55
56
57 int n,m;
58
59 int i,j,k;
60
61 while(scanf("%d",&n)!=EOF)
62 {
63 m=n*(n-1)/2;
64
65 if(n==0)
66 break;
67
68 int len=0;
69 vt.clear();
70
71
72
73
74
75 for(i=0;i<m;i++)
76 {
77 int a,b,c,d;
78
79 scanf("%d%d%d%d",&a,&b,&c,&d);
80
81 if(d==1)
82 c=0;
83
84 for(j=0;j<len;j++)
85 {
86
87 if((vt[j].v1==a)&&(vt[j].v2==b))
88 break;
89
90 if((vt[j].v1==b)&&(vt[j].v2==a))
91 break;
92 }
93
94 if(j<len)
95 {
96 if(vt[j].cost>c)
97 vt[j].cost=c;
98 }
99 else
100 {
101 Node ans;
102 ans.v1=a;
103 ans.v2=b;
104 ans.cost=c;
105 vt.push_back(ans);
106 len++;
107
108 }
109 }
110
111
112 sort(vt.begin(),vt.end(),cmp);
113
114
115
116 for(i=1;i<=n;i++)
117 {fa[i]=0;}
118
119
120 int num=0;
121 int mincost=0;
122
123
124
125 for(i=0;i<vt.size();i++)
126 {
127 int f1=findfa(vt[i].v1);
128 int f2=findfa(vt[i].v2);
129
130 if(f1!=f2)
131 {
132 mincost+=vt[i].cost;
133 num++;
134 fa[f1]=f2;
135
136 if(num==(n-1))
137 break;
138
139
140
141 }
142
143 }
144
145
146 printf("%d\n",mincost);
147 }
148
149
150
151
152
153
154
155
156 return 0;
157 }