最小生成树
2015-07-23 21:05
323 查看
E
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
给出一个带权无向图,求出其最小生成树。保证图连通。
输入
对于每组数据:第一行输入n,m。表示此图有n(n <= 50000)个点,m(m <= 200000)条边。
接下来m行,每行u,v,w。表示u,v之间有一条权值为w的边。
输出
对于每组数据,输出一个整数代表对应的最小生成树的权值和。
示例输入
3 5 1 2 1 1 3 2 2 3 4 2 3 5 1 3 1
示例输出
2
提示
来源
zmx
示例程序
#include <iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<vector> using namespace std; struct node { int from,to,w; } que[200010]; bool cmp(node a,node b) { return a.w<b.w; } int fa[50010]; int fint(int x) { return fa[x]!=x?fa[x]=fint(fa[x]):x; 、、 } int main() { int n,m; int g,h; while(~scanf("%d%d",&n,&m)) { for(int i=0; i<m; i++) { scanf("%d%d%d",&que[i].from,&que[i].to,&que[i].w); } stable_sort(que,que+m,cmp); for(int i=1; i<=n; i++) { fa[i]=i; } int ans=0; int cnt=0; for(int i=0; i<m; i++) { g=fint(que[i].from); h=fint(que[i].to); if(g!=h) { fa[g]=h; ans+=que[i].w; cnt++; if(cnt==n-1) break; } } printf("%d\n",ans); } return 0; }
相关文章推荐
- iOS7新特性-NSURLSession详解
- 最长公共子序列(dp) & hdu 1159 Common Subsequence
- leetcode之路001 Two Sum
- leetcode刷题,总结,记录,备忘154
- handler与handlerThread的区别
- 数学 HDOJ 5301 Buildings
- 股票学习(K线分线)
- 2015 Multi-University Training Contest 2 1006 Friends 壮压
- Android中<meta-data>的使用
- 嵌入式 Linux 对内存的直接读写(devmem)
- python paramiko
- 权限管理之添加用户同时设置角色
- 暑假集训——贪心 P - Yogurt factory 奶牛场
- Android sqlite数据库的用法
- linux C 异常处理的方式
- 按键事件在native和jni中的流程
- 小顶堆的插入删除操作
- 11 个 Visual Studio 代码性能分析工具
- 栈区和堆区
- 四种常见的 POST 提交数据方式