已经修好的路一定要往里面加
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
struct Edge
{
int from,to,dist,status;
bool operator < (const Edge temp)const
{
if(status != temp.status)
return status > temp.status;
else
return dist < temp.dist;
}
}e[5050];
int fa[105];
int Find(int x)
{
if(fa[x] == x) return fa[x];
fa[x] = Find(fa[x]);
return fa[x];
}
int main()
{
int N;
while(scanf("%d", &N) != EOF && N)
{
int n = N*(N-1)/2;
for(int i = 0; i < n; i++)
scanf("%d%d%d%d", &e[i].from, &e[i].to, &e[i].dist, &e[i].status);
sort(e, e+n);
for(int i = 1; i <= N; i++)
fa[i] = i;
int ans = 0;
for(int i = 0; i < n; i++)
{
int x = Find(e[i].from);
int y = Find(e[i].to);
if(x == y)
continue;
else{
fa[x] = y;
if(!e[i].status)
ans += e[i].dist;
}
}
printf("%d\n", ans);
}
return 0;
}