博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdoj 1863 最小生成树(kruskal + 并查集)
阅读量:4216 次
发布时间:2019-05-26

本文共 1075 字,大约阅读时间需要 3 分钟。

#include
#include
#include
using namespace std;struct Edge{ int from, to, w; int next;};int tol, n, m,u,v,w,cop,sum;int head[105];int id[105];Edge edges[10005];//根据顶点估计边数 完全图这里 用有向表示无向 故有n*(n-1) 最多大约 10000 bool cmp(const Edge &a, const Edge &b){ return a.w < b.w;}void addEdge(int from, int to, int w){ edges[tol].next = head[from]; edges[tol].from = from; edges[tol].to = to; edges[tol].w = w; head[from] = tol++;}int find(int p){ if(p == id[p]) return p; else return id[p] = find(id[p]);}int main() { int i, j; while(scanf("%d%d",&m, &n) == 2){ if(m == 0) break; tol = 0; cop = n; sum = 0; for(i = 0; i <= n;++i) id[i] = i; for(i = 0; i < m; ++i){ scanf("%d%d%d",&u,&v,&w); addEdge(u,v,w); } sort(edges,edges+m,cmp);//按照权重从小到大排序 for(int i = 0; i < m; ++i){ int p = find(edges[i].from); int q = find(edges[i].to); if(p == q) continue; sum += edges[i].w; id[p] = q; --cop;//记录连通分量 } if(cop > 1){//如果不能连通所有即 连通分量大于1 printf("?\n"); continue; } printf("%d\n",sum); } return 0; }

转载地址:http://smimi.baihongyu.com/

你可能感兴趣的文章
JAVA实现文件树
查看>>
ebay api GetMyMessages 函数
查看>>
手动12 - 安装php加速器 Zend OPcache
查看>>
set theme -yii2
查看>>
yii2 - controller
查看>>
yii2 - 增加actions
查看>>
php图像处理函数大全(缩放、剪裁、缩放、翻转、旋转、透明、锐化的实例总结)
查看>>
magento url中 uenc 一坨编码 base64
查看>>
强大的jQuery焦点图无缝滚动走马灯特效插件cxScroll
查看>>
Yii2.0 数据库查询
查看>>
yii2 db 操作
查看>>
mongodb group 有条件的过滤组合个数。
查看>>
关于mongodb的 数组分组 array group
查看>>
MongoDB新的数据统计框架介绍
查看>>
mongodb 增加全文检索索引
查看>>
QC数据库表结构
查看>>
测试工具厂商的编程语言什么时候“退休”?
查看>>
资源监控工具 - Hyperic HQ
查看>>
LoadRunner中Concurrent与Simultaneous的区别
查看>>
SiteScope - Agentless监控
查看>>