最小生成树(kruskal算法)
来源:互联网 发布:libjpeg.so.62 ubuntu 编辑:程序博客网 时间:2024/06/07 20:54
#include <cstdio>#include <iostream>#include <queue>#include <vector>#include <cstring>#include <algorithm>#include <string>#include <map>#include <set>using namespace std;int n,m;const int maxn = 1e5;int f[maxn];struct node{ int x;int y;int d;}tmp[maxn];int cmp(node a,node b){ return a.d < b.d;}int getf(int x){ if(f[x] == x) return x; else return (f[x] = getf(f[x]));}int mix(int x,int y){ int t1 = getf(x); int t2 = getf(y); if(t1 != t2) { f[t1] = t2; return 1; } return 0;}int main(){ cin >> n >> m; for(int i = 0;i <= n;i++) f[i] = i; for(int i = 0;i < m;i++) cin >> tmp[i].x >> tmp[i].y >> tmp[i].d; sort(tmp,tmp+m,cmp); long long sum = 0; for(int i = 0;i < m;i++)///算法的核心部分 { if(mix(tmp[i].x,tmp[i].y)) sum += tmp[i].d; } cout << sum << endl; return 0;}/**6 92 4 113 5 134 6 35 6 42 3 64 5 71 2 13 4 91 3 2**/
算法的核心部分其实还可以优化,就是当边检验到n-1的时候,就已经成了一棵树了,就不需要继续进行判断的,可以省下一部分判断的时间
long long sum = 0; int cnt = 0; for(int i = 0;i < m;i++) { if(mix(tmp[i].x,tmp[i].y)) sum += tmp[i].d,cnt++; if(cnt == n-1) break; }
阅读全文
0 0
- 最小生成树算法(prim&kruskal)
- poj1251最小生成树(kruskal算法)
- 最小生成树 kruskal(算法)
- 最小生成树(Kruskal算法)--poj2421
- 最小生成树(kruskal算法)
- 最小生成树(Kruskal算法)
- Kruskal算法(求最小生成树)
- 最小生成树2(Kruskal算法)
- 最小生成树算法(2)------------Kruskal
- Kruskal 算法(最小生成树)
- 最小生成树算法[Prime/(Kruskal)]
- 最小生成树(二)...Kruskal算法
- kruskal最小生成树(MST)算法
- 最小生成树(kruskal算法)
- 最小生成树-Kruskal算法(模板)
- 最小生成树(Kruskal算法)
- 最小生成树(Kruskal算法)
- 最小生成树(Kruskal算法)模板
- GHGL项目总结-TIPS系统和银行拨付
- 样式进行中
- jsp+servlet+二进制图片存取
- 求一颗二叉树的镜像
- java面试资料—JVM相关
- 最小生成树(kruskal算法)
- Lightoj 1027
- 对string对象扩展一个方法,删除前后空格
- 日常运维工作的知识体系
- js实现textarea自适应高度
- 【转】VC窗口刷新InvalidateRect和UpdateWindow RedrawWindow
- weblogic集群配置和session共享(12c版本) 上
- HTML
- VS2010打开水晶报表乱码问题