思路:最小生成树模板题
#include <bits/stdc++.h>
#define x first
#define y second
#define pii pair<int,int>
using namespace std;
const int N = 110 * 50;
int p[N];
int n;
struct node
{
int a,b,w;
}kru[N];
int find(int x)
{
if(p[x] != x) p[x] = find(p[x]);
return p[x];
}
bool cmp(node a,node b){
return a.w < b.w;
}
int main(){
while(cin >> n,n){
for(int i = 1 ; i<= n; i++) p[i] = i;
int m = n * (n - 1) / 2;
for(int i = 1; i <= m; i ++){
int a,b,c,d; cin >> a >> b >> c >> d;
if(d == 1){
a = find(a) , b = find(b);
if(a != b) p[a] = b;
}
kru[i] = {a,b,c};
}
sort(kru + 1, kru + m + 1,cmp);
int res = 0;
for(int i = 1; i <= m; i ++){
int a = kru[i].a, b = kru[i].b , w = kru[i].w;
a = find(a) , b = find(b);
if(a != b)
{
p[a] = b;
res +=w;
}
}
cout << res << endl;
}
}