博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU1233 还是畅通工程
阅读量:6533 次
发布时间:2019-06-24

本文共 2008 字,大约阅读时间需要 6 分钟。

问题链接:

问题描述:参见上述链接

问题分析:这是一个最小生成树的为问题,解决的有Kruskal(克鲁斯卡尔)和Prim(普里姆)。

程序说明:本程序使用Kruskal实现。有关最小生成树的问题,使用克鲁斯卡尔算法更具有优势,只需要对所有的边进行排序后处理一遍即可。程序中使用了并查集,用来判定加入一条边后会不会产生循环。程序中,图采用边列表的方式存储,按边的权从小到大顺序放在优先队列中,省去了排序。

需要注意的是,优先队列申明的位置,以及它和结束条件(“count == n - 1”)的配合。对于每一个测试用例,开始是优先队列应该是空的。

AC的程序如下:

/* HDU1233 还是畅通工程 */#include 
#include
#include
using namespace std;const int MAXN = 100;// 并查集int v[MAXN+1];class UF { int length;public: UF() {} // 压缩 int Find(int x) { if(x == v[x]) return x; else return v[x] = Find(v[x]); } bool Union(int x, int y) { x = Find(x); y = Find(y); if(x == y) return false; else { v[x] = y; return true; } } // 唯一树根判定连通性 bool isconnect() { int root = -1; for( int i=1 ; i<=length ; i++ ) if(root == -1) root = Find(i); else if(Find(i) != root) return false; return true; } void reset(int n) { length = n; for(int i=0; i<=n; i++) v[i] = i; }};struct edge { int src, dest, cost; bool operator < (const edge& n) const { return cost > n.cost; }};int main(){ UF uf; edge e; int n, m; while(scanf("%d", &n) != EOF && n) { priority_queue
q; // 优先队列,用于存储边列表 uf.reset(n); m = n * (n-1) / 2; // 构建优先队列 while(m--) { scanf("%d%d%d", &e.src, &e.dest, &e.cost); q.push(e); } // Kruskal算法:获得最小生成树 int ans=0, count=0; while(!q.empty()) { e = q.top(); q.pop(); if(uf.Union(e.src, e.dest)) { count++; ans += e.cost; } if(count == n - 1) break; } // 结果 printf("%d\n", ans); } return 0;}

转载于:https://www.cnblogs.com/tigerisland/p/7564090.html

你可能感兴趣的文章
PHP中的一些新特性
查看>>
Jmockit使用
查看>>
I.MX6 Android mmm convenient to use
查看>>
[CareerCup] 13.9 Aligned Malloc and Free Function 写一对申请和释放内存函数
查看>>
Stack and Heap 堆和栈的区别
查看>>
什么是 A 轮融资?有 B轮 C轮么?
查看>>
55、Android网络图片 加载缓存处理库的使用
查看>>
svn文件提交时强制写注释
查看>>
【转载】千万级规模高性能、高并发的网络架构经验分享
查看>>
jsp字段判空
查看>>
OC基础--OC中的类方法和对象方法
查看>>
ubuntu samba服务器多用户配置【转】
查看>>
母线的种类与作用是什么(转)
查看>>
【Xamarin 挖墙脚系列:IOS 开发界面的3种方式】
查看>>
Atitit.工作流系统的本质是dsl 图形化的dsl 4gl
查看>>
I.MX6 Android USB Touch eGTouchA.ini文件存放
查看>>
4-5-创建索引表-串-第4章-《数据结构》课本源码-严蔚敏吴伟民版
查看>>
java 操作 RabbitMQ 发送、接受消息
查看>>
go run main.go undefined? golang main包那点事
查看>>
前端进阶(13) - 搭建自己的前端脚手架
查看>>