どこでもドア:
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4141
生成一颗最大权值与最小权值相差最小的树。输出最大最小权值的差。
kruscal算法。按权值排序后遍历可能的生成树,找权差最小的。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<sstream>
#include<set>
#include<cstdlib>
#include<map>
#include<queue>
#include<vector>
#include <utility> // std::pair, std::make_pair
using namespace std;
typedef long long LL;
const int INF = 0x3f3f3f3f;//最大值
const int N=102;int edge[N][N];
int p[N];
int n,m;
vector<pair<int, int>> vec;int find(int x)
{return p[x]==x? x : p[x]=find(p[x]);
}
void unit(int x,int y)
{int a=find(x);int b=find(y);if(a!=b)p[a]=b;
}
int krus(int x)
{int cnt=0;int fx=vec[x].first;int fy=vec[x].second;for(int i=0;i<=n;i++){p[i]=i;}for(int i=x;i<m;i++){int ex=vec[i].first;int ey=vec[i].second;if(find(ex)!=find(ey)){cnt++;if(cnt==n-1) return edge[ex][ey]-edge[fx][fy];unit(ex,ey);}}return INF;
}bool cmd(pair<int, int> a,pair<int, int> b){return edge[a.first][a.second]<edge[b.first][b.second];
}
int sel()
{if(m<n-1||krus(0)==INF) return -1;int ans=INF;sort(vec.begin(),vec.end(),cmd);for(int i=0;i<m;i++){int a=krus(i);if(a==INF) continue;ans=min(ans,a);}return ans;
}int main()
{while(~scanf("%d%d",&n,&m)&&!(n==0&&m==0)){memset(edge,0,sizeof(edge));vec.clear();for(int i=0;i<m;i++){int x,y,z;scanf("%d%d%d",&x,&y,&z);edge[x][y]=edge[y][x]=z;vec.push_back(make_pair(x, y));}cout<<sel()<<endl;}return 0;
}

(UVA1395)Slim Span(A)相关推荐

  1. 洛谷 UVA1395 苗条的生成树 Slim Span

    题目链接 题目描述 求所有生成树中最大边权与最小边权差最小的,输出它们的差值. 题目分析 要求所有生成树中边权极差最小值,起初令人无从下手.但既然要求所有生成树中边权极差最小值,我们自然需要对每一棵生 ...

  2. Slim Span UVA - 1395 (并查集)

    Slim Span UVA - 1395 题目大意: 给出m条边,问使n个节点连成一幅连通图的最大边减去最小边的最小值 思路: 对边按照边权排序,求出在边权从小到大的边序列中连续的可以使点连成图的边的 ...

  3. POJ 3522 Slim Span (Kruskal枚举最小边)

    题意: 求出最小生成树中最大边与最小边差距的最小值. 分析: 排序,枚举最小边, 用最小边构造最小生成树, 没法构造了就退出 1 #include <stdio.h> 2 #include ...

  4. Slim Span UVA - 1395

    题意:寻找满足条件的最小生成树,条件是生成树中最长边与最短边的差越小越好. 题解:将边进行排序后,枚举第一条边,然后不断更新答案就行了. 1 #define INF 1e8 2 #include< ...

  5. poj 3522 Slim Span

    题意:给N个点,M条边,每个边有相应的权值,然后求出用M条边中的N-1条边形成的树中,边权值最大与最小的差为所有树中最小. 思路:想到了并查集,然后借用克鲁斯卡尔的思想,边排序,再枚举一下即可. 卡了 ...

  6. 【uva 1395】Slim Span(图论--最小生成树+结构体快速赋值 模版题)

    题意:给一个N(N<=100)个点的联通图(无自环和平行边),求苗条度(最大边-最小边的值)尽量小的生成树. 解法:枚举+Kruskal.先从小到大排序边,枚举选择的最小的边. 1 #inclu ...

  7. 【Kruskal】Uva 1395 Slim Span

    这段时间要沉迷刷题一段时间了,就让CSDN陪我一起吧! 一.题目大意 题目的大致意思就是要你求一个图的生成树,要保证求解的这棵生成树的边的权值,最大值减去最小值最小,要求输出这个最小值. 二.题目思路 ...

  8. 【图论专题】最小生成树及其简单应用

    整理的算法模板合集: ACM模板 题目列表: 题目 算法 AcWing 1140. 最短网络 prim模板 AcWing 1141. 局域网 kruskal模板 AcWing 1142. 繁忙的都市 ...

  9. ICPC程序设计题解书籍系列之五:吴永辉:《数据结构编程实验》(第2版)

    第1章 简单计算 UVALive2362 POJ1004 HDU1064 ZOJ1048 Financial Management[数学+水题] - 海岛Blog - CSDN博客 POJ1552 H ...

最新文章

  1. c实现三角形角度大于一个值_初中数学|高分必备!数学三角形相关知识点梳理汇总...
  2. python基础教程第三版试题-Python基础教程(第3版) 笔记(二)
  3. Microsoft Bot Framework 上手
  4. php 类调用本身方法,php几个关于类的预定义自动调用方法
  5. Java 完美实现添加、读取和删除 Excel 批注
  6. 感受学生考勤“智慧化”变革 签到荚让校园更智慧
  7. 傅立叶变换是如何改变我们生活的? ——四个角度告诉你答案
  8. linux帆软内存设置,修改FineReport配置参数
  9. MySQL 字段操作命令
  10. 计算机论文中期报告进展情况,毕业论文中期进度报告 毕业论文中期报告
  11. OA和BPM有什么区别?企业应该如何选型
  12. 2021年焊工(初级)考试题及焊工(初级)考试报名
  13. Windows Server 2008密码破解
  14. 【闲谈】应聘时要问HR的7个问题
  15. QQ聊天快捷键【很好用的哦】
  16. 一套Python入门视频
  17. 2023美国大学生数学建模竞赛资料及思路
  18. 人类一败涂地做图教程_《人类:一败涂地》鼠绘图文教程 详细技巧分享
  19. linux飞信机器人,安装fetion飞信机器人
  20. linux shell脚本传数组参数,shell脚本----函数和数组

热门文章

  1. PDPS15.0机器人汽车件焊接 喷涂 人机仿真视频教程
  2. kubernetes中显示所有命名空间中的deployment、Pod以及所有的Pod对应的命名空间
  3. spring boot自动化配置
  4. #GNS3,wireshark,CRT的安装
  5. android分享图片到qq,Android实现截图分享qq,微信
  6. [独家提供][亲自制作]完美ie8绿色中文版版支持win7x64
  7. 59 SD配置-科目分配-分配科目代码
  8. “3.15”曝光的人脸识别摄像头,错在用错了场所
  9. 阿里p7架构师带你领略JMM
  10. 软考高级系统架构设计师:特定领域软件架构