Slim Span POJ
来源:互联网 发布:java weka 编辑:程序博客网 时间:2024/06/15 03:44
最小生成树最大边和最小边之差最小
题意:
求最小生成树最大边和最小边的最小差值
思路
用kruskal 算法,枚举最小边即可
代码
/* * Author : Echo * Email : 1666424499@qq.com * Description : * Created Time : 2017/10/10 19:25:26 * Last Modify : 2017/10/14 16:27:10 * File Name : \yanga11ang\write.cpp */#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#include <string>#include <queue>using namespace std;const int maxn=110;const int maxm=1e4+100;const double INF=1e9;struct node{ int u,v,w;}an[maxm];int n,m;int fa[maxn];int findp(int a){ if(fa[a]==a) return a; fa[a]=findp(fa[a]); return fa[a];}int kruskal(int star){ for(int i=1;i<=n;i++){ fa[i]=i; } int cnt=0; int maxx=-1e9,minn=1e9; for(int i=star;i<=m;i++){ int u=an[i].u; int v=an[i].v; int up=findp(u); int vp=findp(v); if(up==vp) continue; fa[up]=vp; cnt++; if(maxx<an[i].w) maxx=an[i].w; if(minn>an[i].w) minn=an[i].w; } if(cnt!=n-1) return-1; return maxx-minn;}bool cmp(node a,node b){ return a.w<b.w;}int main(){ while(~scanf("%d%d",&n,&m)){ if(n==m&&n==0)break; for(int i=1;i<=m;i++){ scanf("%d%d%d",&an[i].u,&an[i].v,&an[i].w); } sort(&an[1],&an[1]+m,cmp); int ans=1e9; for(int i=1;i<=m;i++){ int res=kruskal(i); if(res==-1) break; if(ans>res) ans=res; } if(ans==1e9) printf("-1\n"); else printf("%d\n",ans); } return 0;}/* */
阅读全文
0 0
- POJ 3522 Slim Span
- poj 3522 Slim Span
- POJ 3522 Slim Span
- poj 3522 Slim Span
- poj 3522 Slim Span
- poj 3522 Slim Span
- poj 3522 Slim Span
- POJ 3522 Slim Span
- poj 3522 Slim Span
- POJ 3522 Slim Span
- poj 3522 Slim Span
- poj 3522 Slim Span
- POJ 3522 Slim Span
- POJ 3522 Slim Span
- poj slim span
- poj 3522 Slim Span
- poj 3763:Slim Span
- POJ 3522 Slim Span
- MapReduce两种执行环境的搭建和测试
- angularjs购物车
- U盘系统安装
- sudo unable to resolve host错误
- redis-多数据库
- Slim Span POJ
- HttpServletRequest常用获取URL的方法
- js深拷贝和浅拷贝
- 修改DataGridView的ColumnHeaderStyle
- Qml超链接
- python之pip
- 高性能 javaScript 之事件委托(Vue版)
- 论文代发价格
- python3利用venv配置虚拟环境及过程中的小问题