Slim Span UVA
来源:互联网 发布:云主机绑定域名 编辑:程序博客网 时间:2024/05/21 17:58
Think:
1Kruskal算法生成最小树
2题意理解:
1>生成一颗最小树使得他的边的最大权值减去边的最小权值最小
3思路:从权值最小的边出发建立最小生成树,不断更新生成的最小树的苗条度(边的最大权值减去边的最小权值)
vjudge题目链接
以下为Accepted代码
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;struct node { int a, b; int w;}edg[5400];bool cmp(node a, node b){ return a.w < b.w;}int n, m, f[144];void Init();bool merge(int u, int v);int get_f(int x);int main(){ int i, j, ans, cnt, sum; bool flag; while(scanf("%d %d", &n, &m) && (n || m)){ for(i = 1; i <= m; i++) scanf("%d %d %d", &edg[i].a, &edg[i].b, &edg[i].w); sort(edg+1, edg+m+1, cmp); ans = 19980414; for(i = 1; i <= m; i++){ Init(); cnt = 0, flag = false; for(j = i; j <= m; j++){ if(merge(edg[j].a, edg[j].b)){ cnt++; } if(cnt == n-1){ sum = edg[j].w - edg[i].w; ans = min(ans, sum); flag = true; break; } } if(!flag) break; } if(ans != 19980414) printf("%d\n", ans); else printf("-1\n"); } return 0;}void Init(){ for(int i = 1; i <= n; i++) f[i] = i;}bool merge(int u, int v){ int t1 = get_f(u); int t2 = get_f(v); if(t1 != t2){ f[t2] = t1; return true; } else return false;}int get_f(int x){ if(f[x] == x) return x; else { f[x] = get_f(f[x]); return f[x]; }}
阅读全文
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 1396 Slim Span
- UVa 1395 slim span
- UVA 1395 Slim Span
- UVA 1395 Slim Span
- UVA 1395Slim Span
- Slim Span UVA
- uva 1395Slim Span
- Slim Span UVA
- uva 1395 Slim Span
- Uva 1395 Slim Span
- UVA 1395 Slim Span(枚举)
- uva 1395 slim span MST
- 量化进阶——如何运用量化捕捉涨停
- 支付宝处理对账单
- MSM8909android5.1.1启动流程
- 特殊的广播接收者
- 1125. Chain the Ropes (25)[数学逻辑题]
- Slim Span UVA
- android内存优化final
- 数据结构实验之二叉树的建立与遍历
- 1190: 连接电脑
- AutoItLibrary安装和常见问题解决
- java 根据经纬度获取百度地图地址
- Mockito快速入门
- TF/05_Nearest_Neighbor_Methods/TF/05_Nearest_Neighbor_Methods
- Kconfig基本语法