图结构练习——最小生成树
来源:互联网 发布:盒子k歌软件 编辑:程序博客网 时间:2024/06/05 10:43
Think:
1知识点:最小生成树Kruskal算法
2反思:题意分析建议使用最小生成树Prim算法
3知识体系分析:Kruskal算法更适用于稀疏图,未加堆优化的Prim算法更适用于稠密图,堆优化的Prim算法更适用于稀疏图——啊哈!算法
SDUT题目链接
以下为Accepted代码
#include <bits/stdc++.h>using namespace std;struct node { int u; int v; int w;}e[100004];int n, f[104];bool cmp(struct node a, struct node b){ return (a.w < b.w);}void Init();int get_f(int v);bool Merge(int u, int v);int main(){ int m, i, cnt, sum; while(scanf("%d %d", &n, &m) != EOF){ cnt = sum = 0; Init(); for(i = 1; i <= m; i++){ scanf("%d %d %d", &e[i].u, &e[i].v, &e[i].w); } sort(e+1, e+m+1, cmp); for(i = 1; i <= m; i++){ if(cnt == n-1) break; if(!Merge(e[i].u, e[i].v)){ cnt++; sum += e[i].w; } } printf("%d\n", sum); } return 0;}void Init(){ for(int i = 1; i <= n; i++) f[i] = i;}int get_f(int v){ if(f[v] == v) return f[v]; else { f[v] = get_f(f[v]); return f[v]; }}bool Merge(int u, int v){ int t1 = get_f(u); int t2 = get_f(v); if(t1 == t2) return true; else { f[t2] = t1; return false; }}/***************************************************User name: Result: AcceptedTake time: 20msTake Memory: 336KBSubmit time: 2017-07-14 10:15:57****************************************************/
阅读全文
0 0
- SDUT 2144 图结构练习——最小生成树
- sdut2144图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树 kruskal
- 图结构练习——最小生成树-prim
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树 Prim算法
- 图结构练习——最小生成树 Kruskal算法
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 机器学习资料集合
- SpringMVC与Struts2区别与比较总结
- Ubuntu16.04安装Apache+MySQL+PHP
- js加载优化:Script DOM Element
- 【转】jsp报错:name cannot be resolved to a variable
- 图结构练习——最小生成树
- norflash-nandflash-SDRAM的区别及作用
- 邮件客户端WebMail Pro v7.7.5发布,在线订购限时75折优惠!
- java post 表单传参与json传参
- 编译内核出现kernel/timeconst.pl line 373
- 结构体与类
- Android View 视图动画
- 12. 图--图的遍历
- Linux文件属性3——文件权限管理