poj 3522(最小生成树应用)
题目链接:http://poj.org/problem?id=3522思路:题目要求最小生成树中最大边与最小边的最小差值,由于数据不是很大,我们可以枚举最小生成树的最小边,然后kruskal求最小生成树,直到不能生成生成树为止,然后取最小的差值即可。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 #define MAXN 111 7 #define inf 1<<30 8 9 struct Edge{ 10 int u,v; 11 int len; 12 }edge[MAXN*MAXN]; 13 int parent[MAXN]; 14 int n,m; 15 16 void Initiate() 17 { 18 for(int i=1;i<=n;i++){ 19 parent[i]=i; 20 } 21 } 22 23 int Find(int x) 24 { 25 if(x==parent[x]){ 26 return parent[x]; 27 } 28 parent[x]=Find(parent[x]); 29 return parent[x]; 30 } 31 32 void Union(int u,int v) 33 { 34 int r1=Find(u),r2=Find(v); 35 if(r1==r2)return ; 36 parent[r1]=r2; 37 } 38 39 int cmp(const Edge &p,const Edge &q) 40 { 41 return p.len<q.len; 42 } 43 44 int Kruskal(int id) 45 { 46 int count=0,MIN=inf,MAX=-inf; 47 for(int i=0;i<m;i++){ 48 if(edge[i].len<edge[id].len)continue; 49 int u=edge[i].u,v=edge[i].v; 50 if(Find(u)!=Find(v)){ 51 MIN=min(MIN,edge[i].len); 52 MAX=max(MAX,edge[i].len); 53 count++; 54 Union(u,v); 55 if(count==n-1)return MAX-MIN; 56 } 57 } 58 return -1; 59 } 60 61 62 63 int main() 64 { 65 while(~scanf("%d%d",&n,&m)){ 66 if(n==0&&m==0)break; 67 for(int i=0;i<m;i++){ 68 scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].len); 69 } 70 sort(edge,edge+m,cmp); 71 int ans=inf; 72 for(int i=0;i<m;i++){ 73 Initiate(); 74 int tmp=Kruskal(i); 75 if(tmp==-1)break; 76 ans=min(ans,tmp); 77 } 78 if(ans!=inf){ 79 printf("%d\n",ans); 80 }else 81 printf("-1\n"); 82 } 83 return 0; 84 }
View Code
poj 3522(最小生成树应用)相关推荐
- POJ - 1251(最小生成树.krustal)
题目链接:http://poj.org/problem?id=1251 题目: Jungle Roads Time Limit: 1000MS Memory Limit: 10000K Total ...
- POJ - 2485(最小生成树.prime)
题目链接: http://poj.org/problem?id=2485 题目: Highways Time Limit: 1000MS Memory Limit: 65536K Total Su ...
- poj 3026 (最小生成树)
题意:起点开始有超过100个人,总共不会超过100个外星人,问把所有的外星人都搜出来花的最小时间.一条路径上的时间跟人数是无关的,只跟路径长度有关. 思路:刚开始人都在起点,当派一定人数去最近的外星人 ...
- POJ 3522 Slim Span (Kruskal枚举最小边)
题意: 求出最小生成树中最大边与最小边差距的最小值. 分析: 排序,枚举最小边, 用最小边构造最小生成树, 没法构造了就退出 1 #include <stdio.h> 2 #include ...
- Constructing Roads POJ - 2421 (最小生成树)
思路:首先使用二维数组dis[][]处理输入, 对于已经修好的路,将其对应的dis[i][j]置为零即可.最后再将 所有的dis[][]保存到边结构体中,使用Kruskal算法求得最小生成树. ...
- Poj 3522 最长边与最短边差值最小的生成树
题意: 让你求一颗生成树,使得最长边和最短边长度差值最小. 思路: 额!!!感觉这个思路会超时,但是ac了,暂时没什么别的好思路,那么就先说下这个思路,大牛要是有好的思路希望能在 ...
- poj 3522 Slim Span
题意:给N个点,M条边,每个边有相应的权值,然后求出用M条边中的N-1条边形成的树中,边权值最大与最小的差为所有树中最小. 思路:想到了并查集,然后借用克鲁斯卡尔的思想,边排序,再枚举一下即可. 卡了 ...
- 2019.9.19最小生成树知识点总结
HDU 1102 Constructing Roads(最小生成树-Prim) 最常见的,将已建成的路的权值设置为0,求最小生成树! HDU 1162 Eddy's picture(最小生成 ...
- NOIP 好题推荐(DP+搜索+图论)POJ ZOJ
NOIP好题推荐(DP+搜索+图论)POJ ZOJ 1370 Gossiping (数论->模线性方程有无解的判断)+(图论->DFS) 1090 Chain ->格雷码和二进制码 ...
最新文章
- 如何基于ERP的sales organization 创建CRM对应的数据
- java中线程死锁及避免_如何避免Java线程中的死锁?
- 熊猫数据集_熊猫迈向数据科学的第三部分
- python多任务笔记
- mysql创建表时表明加单引号_python在MySQL表名周围插入单引号(‘)
- discuz mysql配置文件_MySQL优化配置文件my.ini(discuz论坛)
- 中国成为「研究生大国」,99%研究生背后的焦虑:就业更难了!
- restController
- python调用QQ音乐API
- Unity官方文档解读之如何使用粒子系统创建汽车尾气
- 【Android机器学习实战】3、定制可点击View、目标检测、以图搜图实战
- Android基础第四篇
- 2008 NBA 全明星周未之扣篮大赛
- linux下主目录和根目录的区别
- html中tabindex属性是啥意思
- python神器排行_9款强大的Python工具包,第5款神器期待已久!
- CStdioFile扩展(支持Ansi、Unicode、Utf-8等文本格式)
- Android TV Metro界面
- Ubuntu 图片查看器 nomacs 安装
- php 如何用op浏览器开发手机网站,PHP实现手机网站支付(兼容微信浏览器)
热门文章
- 专业计算机能力考试 技巧,全国专业技术人员计算机应用能力考试应试技巧
- Angular之组件的创建
- 漫画|你还记得原生的JDBC怎么连接数据库吗?
- zabbix报警收到tcmime.1456.1456.1878.bin附件邮件
- [wxWidgets]_[0基础]_[不常见但有用的类wxStandardPaths]
- 优雅且高效的使用Chrome Developer Tools
- 提示 launch failed
- log4net(c#) 配置及使用
- CentOS下的freenx配置
- 青光眼-复内路粘小管成形术(ABiC)-转载