kruskal(最小生成树)
来源:互联网 发布:云计算的优缺点 编辑:程序博客网 时间:2024/05/20 10:52
图论基本知识
HDU 1233
这里的代码是上面那个链接的题解
本质上就是贪心。
每次选取权值最小的边,然后判断是否与之前选的边成环,如果不能成环,就选中这条边,如果成环,就不选。
#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int maxn = 105;const int maxm = 10010;const int inf = 0x3f3f3f3f;int m,n;int f[maxn];int edgenum = 0;struct node{ int from,to,w; node(){} node(int a,int b,int c) { from = a; to = b; w = c; }}edge[maxm];bool cmp(node a,node b){ return a.w < b.w;}int getfather(int i){ if(f[i] == i) return i; else return f[i] = getfather(f[i]);}int main(){ while(~scanf("%d",&n) && n) { edgenum = 0; for(int i = 0; i < maxn ; i++) f[i] = i; for(int i = 0; i < (n*(n-1))/2; i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); edge[edgenum++] = node(a,b,c); } sort(edge,edge+edgenum,cmp); int num = 0; int ans = 0; for(int i = 0; i < edgenum ; i++) { int a = getfather(edge[i].from),b = getfather(edge[i].to); if(a != b) { f[a] = b; num ++; ans += edge[i].w; if(num == n-1) break; } } printf("%d\n",ans); } return 0;}
阅读全文
1 0
- 最小生成树(Kruskal)
- 最小生成树(Kruskal)
- 最小生成树(kruskal)
- 最小生成树(kruskal)
- 最小生成树(Kruskal)
- 最小生成树(Kruskal)
- 最小生成树(kruskal)
- 最小生成树(kruskal)
- kruskal(最小生成树)
- 最小生成树(Kruskal)
- 最小生成树Kruskal
- kruskal 最小生成树
- 最小生成树 kruskal
- kruskal 最小生成树
- 最小生成树-Kruskal
- 最小生成树kruskal
- 最小生成树---Kruskal
- Kruskal 最小生成树
- I/O流
- HDU 6044 Limited Permutation dfs 统计
- jsp探针
- 八款Android 开发者必备的小工具
- cocos2d-x游戏引擎基础知识介绍(一)
- kruskal(最小生成树)
- Gerrit上分支操作记录(创建分支、删除分支)
- 微信小程序(初学篇)——仿美团外卖
- Apache Commons工具包
- spring 整合 redis,以及spring的RedisTemplate如何使用
- linux基础操作
- 初次使用Retrofit和Gson
- DML-数据操作语言
- EL表达式详解empty & null