UVa 1395 (最小生成树)
题目链接:http://vjudge.net/problem/41567/origin
本来想着m^2的复杂度撑不住,对于这种擦着边的复杂度就好慌。
首先对所有的边排个序,然后枚举每个可以构成生成树的区间(L,R),取区间里面构成树的边的权值的最小和最大的差值,求最小值即可。
如果已经构成生成树可以break掉优化下。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = ;
struct edge
{
int u,v,w;
};
edge e[maxn];
int pre[];
int Find(int x)
{
return pre[x]==x?x:pre[x]=Find(pre[x]);
}
bool cmp(edge A,edge B)
{
return A.w<B.w;
}
int main()
{
int n,m;
while(scanf("%d %d",&n,&m)!=EOF&&(n||m))
{
for(int i=;i<=m;i++)
{
scanf("%d %d %d",&e[i].u,&e[i].v,&e[i].w);
}
sort(e+,e+m+,cmp);
int count1 = ;
int ans = ;
for(int i=;i<=m;i++)
{
for(int k=;k<=n;k++) pre[k] = k;
count1 = ;
int minv = ;
int maxv = ;
for(int j=i;j<=m;j++)
{
int x = Find(e[j].u);
int y = Find(e[j].v);
if(x!=y)
{
count1++;
pre[x] = y;
maxv = max(maxv,e[j].w);
minv = min(minv,e[j].w);
}
if(count1>=n)
{
break;
}
}
if(count1>=n)
{
ans = min(ans,maxv-minv);
}
}
if(ans!=) printf("%d\n",ans);
else printf("-1\n");
}
return ;
}
UVa 1395 (最小生成树)的更多相关文章
- UVa 1395 (最小生成树) Slim Span
题意: 规定一棵生成树的苗条度为:最大权值与最小权值之差.给出一个n个顶点m条边的图,求苗条度最小的生成树. 分析: 按照边的权值排序,枚举边集的连续区间[L, R]的左边界L,如果这些区间刚好满足一 ...
- UVA 1395 苗条的生成树(最小生成树+并查集)
苗条的生成树 紫书P358 这题最后坑了我20分钟,怎么想都对了啊,为什么就wa了呢,最后才发现,是并查集的编号搞错了. 题目编号从1开始,我并查集编号从0开始 = = 图论这种题真的要记住啊!!题目 ...
- UVa 1395 Slim Span (最小生成树)
题意:给定n个结点的图,求最大边的权值减去最小边的权值最小的生成树. 析:这个和最小生成树差不多,从小到大枚举左端点,对于每一个左端点,再枚举右端点,不断更新最小值.挺简单的一个题. #include ...
- UVa 1395 - Slim Span(最小生成树变形)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA 1395 Slim Span 最小生成树
题意: 给你一个图,让你求这个图中所有生成树中满足题目条件的,这个条件是生成树中最长边与最短边的差值最小. 思路: 根据最小瓶颈生成树的定义:在一个有权值的无向图中,求一个生成树最大边的权值尽量小.首 ...
- UVa 1395 Slim Span【最小生成树】
题意:给出n个节点的图,求最大边减最小边尽量小的值的生成树 首先将边排序,然后枚举边的区间,判定在该区间内是否n个点连通,如果已经连通了,则构成一颗生成树, 则此时的苗条度是这个区间内最小的(和kru ...
- UVA 1395 Slim Span (最小生成树,MST,kruscal)
题意:给一个图,找一棵生成树,其满足:最大权-最小权=最小.简单图,不一定连通,权值可能全相同. 思路:点数量不大.根据kruscal每次挑选的是最小权值的边,那么苗条度一定也是最小.但是生成树有多棵 ...
- UVA - 1395 Slim Span (最小生成树Kruskal)
Kruskal+并查集. 点很少,按边权值排序,枚举枚举L和R,并查集检查连通性.一旦连通,那么更新答案. 判断连通可以O(1),之前O(n)判的,第一次写的过了,后来T.. #include< ...
- 【uva 1395】Slim Span(图论--最小生成树+结构体快速赋值 模版题)
题意:给一个N(N<=100)个点的联通图(无自环和平行边),求苗条度(最大边-最小边的值)尽量小的生成树. 解法:枚举+Kruskal.先从小到大排序边,枚举选择的最小的边. 1 #inclu ...
随机推荐
- appium元素集合定位
概念:某一类型元素的集合 list对象 来源:-控件复用 -相同的控件类型 -取名重复 语法:driver.findElements(By.id("text1")).get(0) ...
- bootstrap如何自定义5等分
根据bootstrap源码改的1比5的栅格系统 /*5等分媒体查询样式begin*/ .col-xs-1-5,.col-sm-1-5,.col-md-1-5,.col-lg-1-5,.col-xs-4 ...
- Installation LEK Cluster
The structure of cluster like this: We used four VM: A 10.32.xxx.213 ubuntu12.04 B 10.32.xxx.214 ...
- Hibernate5-课程笔记3
详解Hibernate的API: (1)Configuration接口: org.hibernate.cfg.Configuration接口的作用是加载主配置文件及映射文件,以实现对Hibernate ...
- Journey
Journey 题目链接:http://codeforces.com/problemset/problem/721/C dp/记忆化搜索/拓扑排序 刚开始想到用bfs+dp,fst(然而中间有一步逻辑 ...
- 使用javassist运行时动态重新加载java类及其他替换选择
在不少的情况下,我们需要对生产中的系统进行问题排查,但是又不能重启应用,java应用不同于数据库的存储过程,至少到目前为止,还不能原生的支持随时进行编译替换,从这种角度来说,数据库比java的动态性要 ...
- PAT 团体程序设计天梯赛-练习集 L1-007. 念数字
输入一个整数,输出每个数字对应的拼音.当整数为负数时,先输出“fu”字.十个数字对应的拼音如下: 0: ling 1: yi 2: er 3: san 4: si 5: wu 6: liu 7: qi ...
- 一行一行分析JQ源码学习笔记-02
1.防止冲突 设置新变量保存
- ggplot2 scale相关设置
ggplot2 scale相关设置 标度设置:主要用于在ggplot画图后的各个图层进行调整设置. 1.相关属性scale设置 包括scale_size().scale_alpha().scal ...
- CABasicAnimation 几种停止的回调
一.编写一个简单的动画,使一个UIview从屏幕的左上角移动到左下角,间隔时间3S // // ViewController.m // CAAnimationTest // // Created by ...