(UVA1395)Slim Span(A)
どこでもドア:
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)相关推荐
- 洛谷 UVA1395 苗条的生成树 Slim Span
题目链接 题目描述 求所有生成树中最大边权与最小边权差最小的,输出它们的差值. 题目分析 要求所有生成树中边权极差最小值,起初令人无从下手.但既然要求所有生成树中边权极差最小值,我们自然需要对每一棵生 ...
- Slim Span UVA - 1395 (并查集)
Slim Span UVA - 1395 题目大意: 给出m条边,问使n个节点连成一幅连通图的最大边减去最小边的最小值 思路: 对边按照边权排序,求出在边权从小到大的边序列中连续的可以使点连成图的边的 ...
- POJ 3522 Slim Span (Kruskal枚举最小边)
题意: 求出最小生成树中最大边与最小边差距的最小值. 分析: 排序,枚举最小边, 用最小边构造最小生成树, 没法构造了就退出 1 #include <stdio.h> 2 #include ...
- Slim Span UVA - 1395
题意:寻找满足条件的最小生成树,条件是生成树中最长边与最短边的差越小越好. 题解:将边进行排序后,枚举第一条边,然后不断更新答案就行了. 1 #define INF 1e8 2 #include< ...
- poj 3522 Slim Span
题意:给N个点,M条边,每个边有相应的权值,然后求出用M条边中的N-1条边形成的树中,边权值最大与最小的差为所有树中最小. 思路:想到了并查集,然后借用克鲁斯卡尔的思想,边排序,再枚举一下即可. 卡了 ...
- 【uva 1395】Slim Span(图论--最小生成树+结构体快速赋值 模版题)
题意:给一个N(N<=100)个点的联通图(无自环和平行边),求苗条度(最大边-最小边的值)尽量小的生成树. 解法:枚举+Kruskal.先从小到大排序边,枚举选择的最小的边. 1 #inclu ...
- 【Kruskal】Uva 1395 Slim Span
这段时间要沉迷刷题一段时间了,就让CSDN陪我一起吧! 一.题目大意 题目的大致意思就是要你求一个图的生成树,要保证求解的这棵生成树的边的权值,最大值减去最小值最小,要求输出这个最小值. 二.题目思路 ...
- 【图论专题】最小生成树及其简单应用
整理的算法模板合集: ACM模板 题目列表: 题目 算法 AcWing 1140. 最短网络 prim模板 AcWing 1141. 局域网 kruskal模板 AcWing 1142. 繁忙的都市 ...
- ICPC程序设计题解书籍系列之五:吴永辉:《数据结构编程实验》(第2版)
第1章 简单计算 UVALive2362 POJ1004 HDU1064 ZOJ1048 Financial Management[数学+水题] - 海岛Blog - CSDN博客 POJ1552 H ...
最新文章
- c实现三角形角度大于一个值_初中数学|高分必备!数学三角形相关知识点梳理汇总...
- python基础教程第三版试题-Python基础教程(第3版) 笔记(二)
- Microsoft Bot Framework 上手
- php 类调用本身方法,php几个关于类的预定义自动调用方法
- Java 完美实现添加、读取和删除 Excel 批注
- 感受学生考勤“智慧化”变革 签到荚让校园更智慧
- 傅立叶变换是如何改变我们生活的? ——四个角度告诉你答案
- linux帆软内存设置,修改FineReport配置参数
- MySQL 字段操作命令
- 计算机论文中期报告进展情况,毕业论文中期进度报告 毕业论文中期报告
- OA和BPM有什么区别?企业应该如何选型
- 2021年焊工(初级)考试题及焊工(初级)考试报名
- Windows Server 2008密码破解
- 【闲谈】应聘时要问HR的7个问题
- QQ聊天快捷键【很好用的哦】
- 一套Python入门视频
- 2023美国大学生数学建模竞赛资料及思路
- 人类一败涂地做图教程_《人类:一败涂地》鼠绘图文教程 详细技巧分享
- linux飞信机器人,安装fetion飞信机器人
- linux shell脚本传数组参数,shell脚本----函数和数组
热门文章
- PDPS15.0机器人汽车件焊接 喷涂 人机仿真视频教程
- kubernetes中显示所有命名空间中的deployment、Pod以及所有的Pod对应的命名空间
- spring boot自动化配置
- #GNS3,wireshark,CRT的安装
- android分享图片到qq,Android实现截图分享qq,微信
- [独家提供][亲自制作]完美ie8绿色中文版版支持win7x64
- 59 SD配置-科目分配-分配科目代码
- “3.15”曝光的人脸识别摄像头,错在用错了场所
- 阿里p7架构师带你领略JMM
- 软考高级系统架构设计师:特定领域软件架构