poj3522求一棵生成树使最大的边和最小的边差值最小
来源:互联网 发布:免费ftp软件 编辑:程序博客网 时间:2024/05/05 15:51
/*题目:给出一张图,求一棵生成树使得最大边权和最小边权差值最小*//*思路:对边权排序,依次枚举最小边,再与后边组成生成树,直到满足题意。若不连通,输出-1,反之,输出差值*/#include <cstdio>#include <algorithm>#define N 100using namespace std;const int inf = 0x3f3f3f3f;typedef struct note {int u; int v; int w;}edge;int n, m;edge e[N*N];int f[N];int cmp(edge a, edge b){return a.w < b.w;}void init(){for (int i = 1; i <= n; i++)f[i] = i;}int find(int x){return x == f[x] ? x : f[x] = find(f[x]);}int merge(int x, int y){int t1, t2;t1 = find(x); t2 = find(y);if (t1 != t2) { f[t2] = f[t1]; return 1; }return 0;}int main(){while (scanf("%d%d", &n, &m) != EOF && (n || m)){int ans = inf;for (int i = 0; i < m; i++)scanf("%d%d%d", &e[i].u, &e[i].v, &e[i].w);sort(e, e + m, cmp);for (int i = 0; i < m; i++){int cnt = 0;init();for (int j = i; j < m; j++){if (merge(e[j].u, e[j].v))cnt++;if (cnt == n - 1){ans = min(ans, e[j].w - e[i].w);break;}}}if (ans == inf)ans = -1;printf("%d\n", ans);}return 0;}
0 0
- poj3522求一棵生成树使最大的边和最小的边差值最小
- poj3522(求最大边最小边差值最小的生成树)
- POJ3522差值最小的生成树
- POJ3522 SlimSpan 最大边和最小边的差最小的生成树
- poj3522 Slim Span 最长边与最短边差值最小的生成树,kruskal算法 + 暴力枚举
- POJ 3522 最大边与最小边差值最小的生成树(最小生成树的性质)
- POJ 3522 最大边与最小边差值最小的生成树
- POJ3522Slim Span(最大边与最小边差值最小的生成树)
- Slim Span 求一颗生成树 使得最大边与最小边的差值最小
- poj3522最小生成树
- POJ3522—最小生成树的巧妙应用
- POJ3522-类最小生成树
- 最小生成树的最大边poj2395
- POJ 1797和2253 最大生成树的最小边 和 最小生成树的最大边
- POJ3522 Slim Span(最小生成树,Kruakal)
- Poj 3522 最长边与最短边差值最小的生成树
- NOIP 边权差值最小的生成树(小数据)
- PKU3522(Slim Span)-求差值最小的生成树
- Android开发中string.xml文件的使用
- 摩羯座男人
- Gson使用指南
- 关于友元函数
- 网管的自我修养-网络系统
- poj3522求一棵生成树使最大的边和最小的边差值最小
- 五险一金
- mysql 5.7 忘记密码 windows
- 如何提升你的能力?给年轻程序员的几条建议
- node版本控制n的使用
- Linux基础-文件的基本管理
- 二叉树经典面试题1~求二叉树的镜像
- 循环语句(Verilog HDL)
- 谏逐客书