[Ybt 1349] 最优布线问题 ——最小生成树[Kruskal]
来源:互联网 发布:胡公子的淘宝店 编辑:程序博客网 时间:2024/05/21 17:55
Kruskal算法
基本思想: 并查集+贪心
操作
首先从小到大排序【贪心】
看最小的边,如果这边的两个结点不是同一个根,【用并查集操作】,则可以合并为一棵新树
Ybt 1349
#include<bits/stdc++.h>using namespace std;struct RoadType{int GoTop,ToTop,Weight;bool operator < (const RoadType &x) const{return Weight<x.Weight;} }Road[10005];int Father[1005];void Init(int Many)//并查集初始化 {for (int i=1; i<=Many; i++) Father[i]=i;}int Find(int Top)//并查集中寻找父节点 {Father[Top]=Father[Top]==Top?Top:Find(Father[Top]);return Father[Top];}void Union(int A, int B)//并查集中合并操作 {Father[Find(A)]=Find(B);}int main(){int Many,Un,RMany=0,Choose=0,C_Top=0,Sum=0;cin >> Many;for (int i=1; i<=Many; i++){for (int j=1; j<=i; j++) cin >> Un;for (int j=i+1; j<=Many; j++){cin >> Road[++RMany].Weight;Road[RMany].GoTop=i;Road[RMany].ToTop=j;}}sort(Road+1,Road+1+RMany);//贪心最基本操作: 排序 Init(Many);while (Choose < Many-1 && C_Top <= RMany)//一个n节点的图,最小生成树,只需要选择n-1条边,自己可以画图想一想 {C_Top++;if (Find(Road[C_Top].GoTop) != Find(Road[C_Top].ToTop))//如果不是同一根【即不是同一棵树】,合并 {Union(Road[C_Top].GoTop,Road[C_Top].ToTop);Sum+=Road[C_Top].Weight; Choose++;}}cout << Sum;}
阅读全文
0 0
- [Ybt 1349] 最优布线问题 ——最小生成树[Kruskal]
- [最小生成树]最优布线问题
- [复习]最小生成树 最优布线问题
- SSL 1612——最优布线问题(最小生成树)
- 最小生成树——并查集+Kruskal(NYOJ 38 布线问题)
- codevs 1231_最优布线问题_最小生成树
- codevs 1231 最优布线问题(最小生成树模板)
- nyoj 38 布线问题(最小生成树 kruskal算法)
- NYOJ 38 布线问题(最小生成树--kruskal)
- nyoj 38 布线问题【最小生成树 Kruskal】
- nyoj 38 布线问题(kruskal 最小生成树)
- NYOJ 38 布线问题 (最小生成树 Kruskal)
- nyist 38 布线问题(最小生成树kruskal)
- NYOJ 38 布线问题 最小生成树 prim与Kruskal
- 1231 最优布线问题 -- kruskal
- 1231 最优布线问题 kruskal
- 布线问题-最小生成树
- wikioi-天梯-通过初赛-最小生成树-1231:最优布线问题
- jvm(二):对象加载浅谈
- 【POJ 2104/HDU 2665】K-th Number【整体二分/主席树】
- 从YOLOv1谈到YOLOv2(1)主要思想
- 技术方案分享
- GitHub客户端操作2--分支操作
- [Ybt 1349] 最优布线问题 ——最小生成树[Kruskal]
- Java异常处理
- 使用WebDriver的隐式等待需要注意的问题
- 最短路径---迪杰斯特拉算法
- 实验3.2 栈和队列——链栈
- centOS7.2的amh控制面板搭建svn服务器
- Tornado框架07-数据库
- Python中 ''.JOIN()的用法
- PV操作简单理解