#include <stdio.h>
#include <algorithm>
using namespace std;
#define N 101
int tree[N];
int find(int x)
{
if (tree[x] == -1) return x;
else
{
int tmp = find(tree[x]);
tree[x] = tmp;
return tmp;
}
}
struct Edge
{
int a, b;
int cost;
int is;
bool operator < (const Edge &A) const
{
return cost < A.cost;
}
};
Edge edge[5000];
int main()
{
int n;
while (scanf("%d", &n) != EOF&&n != 0)
{
int size = 0;
for (int i = 1; i <= n; i++)
tree[i] = -1;
for (int i = 1; i <= n*(n - 1) / 2; i++)
{
int a, b, cost, is;
scanf("%d %d %d %d", &a, &b, &cost,&is);
if (is == 1)
{
int x = find(a);
int y = find(b);
if (x != y)
tree[x] = y;
}
else
{
edge[size].a = a;
edge[size].b = b;
edge[size].cost = cost;
size++;
}
}
sort(edge, edge + size-1);
int ans = 0;
for (int i = 0; i < size; i++)
{
int a = find(edge[i].a);
int b = find(edge[i].b);
if (a != b)
{
tree[a] = b;
ans += edge[i].cost;
}
}
printf("%d\n", ans);
}
return 0;
}
/**************************************************************
Problem: 1028
User: cust123
Language: C++
Result: Accepted
Time:10 ms
Memory:1100 kb
****************************************************************/
题目1028:继续畅通工程
最新推荐文章于 2023-11-24 20:43:55 发布