#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
/*
本题应该注意的地方, 输入的行数为n*(n-1)/2;
在按值排序时,应把 建好的排前面, 应为不用发钱了;
*/
int Set[205];
struct node
{
int x, y;
int value;
int flag;
}s[5005];
int n;
int ans;
bool cmp(node p1, node p2) {
if(p1.flag != p2.flag)
return p1.flag > p2.flag;
return p1.value <= p2.value;
}
int Find(int x) {
return x == Set[x] ? x : Set[x] = Find(Set[x]);
}
void Union(int i)
{
int a, b;
a = Find(s[i].x);
b = Find(s[i].y);
if(a != b)
{
Set[a] = b;
if(!s[i].flag)
{
ans += s[i].value;
s[i].flag = 1;
}
}
}
int main()
{
while(scanf("%d", &n) != EOF && n) {
int t = n*(n-1)/2;
for(int i = 0; i < t; i++) {
scanf("%d%d%d%d", &s[i].x, &s[i].y, &s[i].value, &s[i].flag);
}
sort(s, s+t, cmp);
ans = 0;
for(int i = 1; i <= n; i++)
Set[i] = i;
for(int i = 0; i < t; i++)
Union(i);
printf("%d\n", ans);
}
return 0;
}
hdu1879畅通工程
最新推荐文章于 2022-07-02 11:11:59 发布
本文探讨了排序算法和数据结构在解决特定问题时的应用,包括如何通过优化数据结构提高算法效率,以及如何选择合适的排序算法来处理不同规模的数据集。重点介绍了排序算法的比较、时间复杂度分析,并通过实例展示了数据结构如链表、栈和队列在实际问题中的应用。
594

被折叠的 条评论
为什么被折叠?



