李耀于NOIP2010集训出的题 Dvalue




此题模型比较明显,求无向图的一棵生成树,使得最大边减去最小边的值最小,这是最小生成树的一个变式
设计出此题的算法需要利用Kruskal贪心的性质,首先枚举一条最小边,接着求原图的一棵最小生成树,根据kruskal的定义,该生成树的最大边必定是在当前枚举的最小边时是所有生成树中最小的。(可能一看题目描述有人就会想二分答案了,我二分只有25分,不过最多也就80分)
那么算法流程就出来了,枚举一条最小边,求最小生成树,用最大边减去最小边更新ans,时间复杂度为O(mlogm+m^2*alpha(n)),但对于此题的数据,这种时间复杂度还是比较勉强的,所以我们可以加上下面几个优化。
枚举一条边时,不考虑比它小的边,那么开始时排序就可以了。
对于每次枚举如果已经构造了N-1条边,直接退掉更新ans,后面的边不用枚举。
多条边权值相同时,只需枚举一条即可。
当前边值-当前枚举的最小边值>=当前ans,那么直接退掉此次枚举。
提供HJW大佬的博客%%%%%orz,链接:http://www.cnblogs.com/huangdalaofighting/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct E
{
int u,v,d;
}e[];
struct Node
{
int next,to;
}edge[];
bool vis[];
int head[],num,n,m,ans=2e9,set[];
bool cmp(E a,E b)
{
return a.d<b.d;
}
int find(int x)
{
if (set[x]!=x) set[x]=find(set[x]);
return set[x];
}
int main()
{int minx,maxx=,i,j,u,v,d,l,r,k;
//freopen("dvalue.in","r",stdin);
//freopen("dvalue.out","w",stdout);
cin>>n>>m;
minx=2e9;
for (i=;i<=m;i++)
{
scanf("%d%d%d",&u,&v,&d);
maxx=max(maxx,d);
minx=min(minx,d);
e[i].u=u;e[i].v=v;e[i].d=d;
}
sort(e+,e+m+,cmp);
for (i=;i<=m-n+;i++)
{
for (j=;j<=m;j++)
set[j]=j;
j=;k=i;
while (j<=n-&&k<=m)
{
int p=find(e[k].u),q=find(e[k].v);
if (p!=q)
{
set[p]=q;
j++;
}
k++;
}
if (j>=n) ans=min(ans,e[k-].d-e[i].d);
}
cout<<ans;
}
李耀于NOIP2010集训出的题 Dvalue的更多相关文章
- NOIP2010~2017部分真题总结
NOIP2010~2017部分真题总结 2010 (吐槽)md这个时候的联赛还只有4题吗? 引水入城 只要发现对于有合法解的地图,每个蓄水厂贡献一段区间这个结论就很好做了 那么\(O(n^3)\)对每 ...
- CSU-ACM寒假集训选拔-入门题
CSU-ACM寒假集训选拔-入门题 仅选择部分有价值的题 J(2165): 时间旅行 Description 假设 Bobo 位于时间轴(数轴)上 t0 点,他要使用时间机器回到区间 (0, h] 中 ...
- NOIP2010提高组真题部分整理(没有关押罪犯)
目录 \(NOIP2010\)提高组真题部分整理 \(T1\)机器翻译: 题目背景: 题目描述: 输入输出格式: 输入输出样例: 说明: 题解: 代码: \(T2\)乌龟棋 题目背景: 题目描述: 输 ...
- 2019暑期金华集训 Day6 杂题选讲
自闭集训 Day6 杂题选讲 CF round 469 E 发现一个数不可能取两次,因为1,1不如1,2. 发现不可能选一个数的正负,因为1,-1不如1,-2. hihoCoder挑战赛29 D 设\ ...
- 中南大学2019年ACM寒假集训前期训练题集(基础题)
先写一部分,持续到更新完. A: 寒衣调 Description 男从戎,女守家.一夜,狼烟四起,男战死沙场.从此一道黄泉,两地离别.最后,女终于在等待中老去逝去.逝去的最后是换尽一生等到的相逢和团圆 ...
- 雅礼集训 Day5 T3 题 解题报告
题 题目背景 由于出题人赶时间所以没办法编故事来作为背景. 题目描述 一开始有\(n\)个苹果,\(m\)个人依次来吃苹果,第\(i\)个人会尝试吃\(u_i\)或\(v_i\)号苹果,具体来说分三种 ...
- 中南大学2019年ACM寒假集训前期训练题集(入门题)
A: 漫无止境的八月 Description 又双叒叕开始漫无止境的八月了,阿虚突然问起长门在这些循环中团长哪几次扎起了马尾,他有多少次抓住了蝉等等问题,长门一共回复n个自然数,每个数均不超过1500 ...
- java算法集训结果填空题练习1
1 空瓶换汽水 浪费可耻,节约光荣.饮料店节日搞活动:不用付费,用3个某饮料的空瓶就可以换一瓶该饮料.刚好小明前两天买了2瓶该饮料喝完了,瓶子还在.他耍了个小聪明,向老板借了一个空瓶,凑成3个,换了一 ...
- java算法集训代码填空题练习3
1 数组转置 编写程序将2行3列的数组行列置换复制给3行2列的数组(即数组的转置).已经写了如下代码,请完善之: class y{ public static void main(String[] a ...
随机推荐
- 判断mine类型
var http = require("http"); var fs = require("fs"); var url = require("url& ...
- Java Client/Server 基础知识
Java的网络类库支持多种Internet协议,包括Telnet, FTP 和HTTP (WWW),与此相对应的Java网络类库的子类库为: Java.net Java.net.ftp Java. ...
- 20145237 《Java程序设计》第2周学习总结
教材学习内容总结 本周我学习了java的基础语法.分为类型.变量与运算符,流程控制. 一.类型:1.Java可以区分为基本类型和类类型.类类型也称作参考类型.2.Java中基本类型主要是整数.字节.浮 ...
- Flask 学习 六 大型程序结构
pip freeze >requirement.txt 自动生成版本号 pip install -r requirement.txt 自动下载对应的库 梳理结构 config.py #!/usr ...
- 坑爹了多少年的html元素垂直居中问题
原文章:https://www.w3cplus.com/css3/a-guide-to-flexbox.html 如果你的元素有固定高度的话 父元素用display: flex;height:100p ...
- python 常用算法学习(2)
一,算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.也就是说,能够对一定规范的输入,在有限时间内获得所要求 ...
- CDH:5.14.0 中 Hive BUG记录
CDH5.14.0使用的HIVE版本: 自建表log: +----------------------------------------------------+--+ | createtab_st ...
- 【微软大法好】VS Tools for AI全攻略(2)
接着上文,我们来讨论如何使用Azure资源来训练我们的tensorflow项目.Azure云我个人用得很多,主要是因为微软爸爸批了150刀每月的额度,我可以愉快地玩耍. 那么针对Azure,有成套的两 ...
- JAVA_SE基础——47.接口
如果一个抽象类中的所有方法都是抽象的,则可以将这个类用另一种方法来定义,即接口~ 在定义接口时,需要用interface关键字来声明,具体实例如code1 接口的定义格式:interface 接口名{ ...
- kali rolling更新源之gpg和dirmngr问题
1.编辑 /etc/apt/source.list gedit /etc/apt/sources.list 输入更新源,可以选任何可用更新源,这里设置官方源 deb http://http.kali. ...