UVA 1395 Slim Span
来源:互联网 发布:下载查询信鸽软件 编辑:程序博客网 时间:2024/06/06 20:35
题目大意:
给出一个n(n <= 100 ) 节点的图,求苗条度(最大边 减去 最小边 的值)最小的生成树。
解题思路:
首先按照权值,把边从小到大排序,然后从小到大枚举起始边,当所有点连通时停止,记录最小的一个苗条度。
#include <iostream>#include <cstring>#include <cstdlib>#include <cmath>#include <algorithm>#include <cstdio>using namespace std;const int maxn = 100000 + 10;struct Edge{ int u; int v; int w;}edge[maxn];int f[maxn];int n,m;bool cmp(Edge a,Edge b){ return a.w < b.w;}int find(int x){ return f[x] == x ? x : f[x] = find(f[x]);}int main(){ while(cin>>n>>m) { if(n==0 && m==0) break; int u,v,w; for(int i=1;i<=m;i++) { cin>>u>>v>>w; edge[i].u = u; edge[i].v = v; edge[i].w = w; } int flag = 0; int ans = 10000000; int Max = 0,Min = 10000000; sort(edge+1,edge+1+m,cmp); for(int i=1;i<=m;i++) { Max = 0;Min = 10000000; int k = 0; for(int j=0;j<=n;j++) f[j] = j; for(int j=i;j<=m;j++) { int x = find(edge[j].u); int y = find(edge[j].v); if(x != y) { k++; f[x] = y; if(edge[j].w > Max) Max = edge[j].w; if(edge[j].w < Min) Min = edge[j].w; } } if(k==n-1 && Max - Min < ans) { ans = Max - Min;flag = 1;} } if(flag) cout<<ans<<endl; else cout<<-1<<endl; } return 0;}
0 0
- UVA 1395 Slim Span
- 【UVA】1395-Slim Span
- UVA 1395 - Slim Span
- UVA - 1395 Slim Span
- UVa 1395 Slim Span
- UVA 1395 Slim Span
- UVa 1395 slim span
- UVA 1395 Slim Span
- UVA 1395 Slim Span
- UVA 1395Slim Span
- uva 1395Slim Span
- uva 1395 Slim Span
- Uva 1395 Slim Span
- UVA 1395 Slim Span(枚举)
- uva 1395 slim span MST
- UVA 1395 - Slim Span(MST)
- UVa #1395 Slim Span (例题11-2)
- UVa 1395 - Slim Span(MST)
- Unity3D占用内存太大的解决方法
- JarisFLVPlayer在线浏览
- TableLayout 平均分配单元格
- 索引的创建及使用(sqlserver 2000)
- PrimeFaces
- UVA 1395 Slim Span
- Cocos2d-x 3.0final 终结者系列教程17-屏幕截图后跳转到另外场景
- 点滴记录——Ubuntu 14.04中安装Sublime Text 3并使用SublimeClang插件
- 将其他时区转换当前系统时区
- ant
- 响应性原则之三:用户界面是实时接口
- 原子操作(atomic operation)
- dom对象和Jquery对象搞混了,概念不清楚
- 定制Linux系统原理