李耀于NOIP2010集训出的题 Dvalue
此题模型比较明显,求无向图的一棵生成树,使得最大边减去最小边的值最小,这是最小生成树的一个变式
设计出此题的算法需要利用Kruskal贪心的性质,首先枚举一条最小边,接着求原图的一棵最小生成树,根据kruskal的定义,该生成树的最大边必定是在当前枚举的最小边时是所有生成树中最小的。(可能一看题目描述有人就会想二分答案了,我二分只有25分,不过最多也就80分)
那么算法流程就出来了,枚举一条最小边,求最小生成树,用最大边减去最小边更新ans,时间复杂度为O(mlogm+m^2*alpha(n)),但对于此题的数据,这种时间复杂度还是比较勉强的,所以我们可以加上下面几个优化。
枚举一条边时,不考虑比它小的边,那么开始时排序就可以了。
对于每次枚举如果已经构造了N-1条边,直接退掉更新ans,后面的边不用枚举。
多条边权值相同时,只需枚举一条即可。
当前边值-当前枚举的最小边值>=当前ans,那么直接退掉此次枚举。
提供HJW大佬的博客%%%%%orz,链接:http://www.cnblogs.com/huangdalaofighting/
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 struct E 7 { 8 int u,v,d; 9 }e[10001]; 10 struct Node 11 { 12 int next,to; 13 }edge[10001]; 14 bool vis[5001]; 15 int head[5001],num,n,m,ans=2e9,set[5001]; 16 bool cmp(E a,E b) 17 { 18 return a.d<b.d; 19 } 20 int find(int x) 21 { 22 if (set[x]!=x) set[x]=find(set[x]); 23 return set[x]; 24 } 25 int main() 26 {int minx,maxx=0,i,j,u,v,d,l,r,k; 27 //freopen("dvalue.in","r",stdin); 28 //freopen("dvalue.out","w",stdout); 29 cin>>n>>m; 30 minx=2e9; 31 for (i=1;i<=m;i++) 32 { 33 scanf("%d%d%d",&u,&v,&d); 34 maxx=max(maxx,d); 35 minx=min(minx,d); 36 e[i].u=u;e[i].v=v;e[i].d=d; 37 } 38 sort(e+1,e+m+1,cmp); 39 for (i=1;i<=m-n+1;i++) 40 { 41 for (j=1;j<=m;j++) 42 set[j]=j; 43 j=1;k=i; 44 while (j<=n-1&&k<=m) 45 { 46 int p=find(e[k].u),q=find(e[k].v); 47 if (p!=q) 48 { 49 set[p]=q; 50 j++; 51 } 52 k++; 53 } 54 if (j>=n) ans=min(ans,e[k-1].d-e[i].d); 55 } 56 cout<<ans; 57 }
转载于:https://www.cnblogs.com/Y-E-T-I/p/7423580.html
李耀于NOIP2010集训出的题 Dvalue相关推荐
- 阿里达摩院数学竞赛新一轮考题曝光,李永乐老师曾给出第一题详细解答
乾明 发自 凹非寺 量子位 报道 | 公众号 QbitAI 三万多人,冥思苦想两天两夜没交卷! 今天,阿里达摩院全球数学竞赛第二轮预选赛结束,战况依旧惨烈: 全球共有5万多名选手报名,最终1.6万多 ...
- AcWing《蓝桥杯集训·每日一题》—— 3777 砖块
AcWing<蓝桥杯集训·每日一题>-- 3777. 砖块 文章目录 AcWing<蓝桥杯集训·每日一题>-- 3777. 砖块 一.题目 二.解题思路 三.解题思路 本次博客 ...
- 蒜头君是一位高中电脑老师,这学期正在教学生写 \text{C++}C++ 程序。他的评分标准是依照每一位学生在蒜厂 \text{OJ}OJ 上解出的题数,去计算出对应的得分。为了不让分数落差太大,因此
#include <stdio.h> int main() {int n;int sum=0;while(scanf("%d",&n)!=EOF) /*输入多个 ...
- 李永乐团队2021数学基础过关660题勘误表
李永乐团队2021数学基础过关660题勘误表 附:各大高校专业课资料整理可以看一下我的博客主页上传的资源哦!感谢关注,评论♥点个赞再白嫖呗☞2333
- 2019李永乐考研数学 基础过关660题 数学一
2019李永乐考研数学 基础过关660题 数学一 链接: https://pan.baidu.com/s/1r2jyBI-i1u_uA3fCLnZsEg 提取码: 5ubf 复制这段内容后打开百度网盘 ...
- 中南大学2019年ACM寒假集训前期训练题集(基础题)
先写一部分,持续到更新完. A: 寒衣调 Description 男从戎,女守家.一夜,狼烟四起,男战死沙场.从此一道黄泉,两地离别.最后,女终于在等待中老去逝去.逝去的最后是换尽一生等到的相逢和团圆 ...
- 清华集训2017刷题记录
2322. 「清华集训 2017」Hello world! 题意 一棵树每个点有点权,每次可以选择两个点\(s, t\),选择步长为\(k\),从\(s\)跳到\(t\)(不足\(k\)步直接到\(t ...
- Java长见到的面试题,看你能答出几题,就知道自己有多菜了
作者:Java3y 前言 只有光头才能变强 Redis目前还在看,今天来分享一下我在秋招看过(遇到)的一些面试题(相对比较常见的) 0.final关键字 简要说一下final关键字,final可以用来 ...
- android activity生命周期_Android岗高频面试题合一集,看你能答出几题?
前言 面试季黄金时期来袭,想必许多朋友在这时有找工作.换工作.跳槽涨薪等想法,但你们都有一个相同的过程那就是面试.大家肯定想知道面试时都问哪些面试相关问题,所以就去网上查找题去刷题,为了省去大家找题的 ...
最新文章
- 与现代传感器的接口:轮询ADC驱动程序
- 【radar】毫米波雷达简介
- 在c#中实现类似C语言中的memset功能
- YaoCCAD软件中设置坐标原点
- 怎么找出电脑里隐藏的流氓软件_9成人都不知道的秘密!那些隐藏在你电脑里的“大象”!...
- 年底了,总结一下大型网站的入侵经验[t00ls转载]
- truncate python是删除文件内容吗_在Python中操作文件之truncate()方法的使用教程
- go get 的不再src目录中_如何正确的开始用Go编程
- Linux磁盘下面有个mpatha,Linux中如何使用vmstat命令
- FastStone Capture屏幕长截图
- 图像基础 PSNR 峰值信噪比
- 狂神Redis学习笔记(已更完)
- vue3+typeScript项目运行提示Type string trivially inferred from a string literal, remove type annotatio怎么解决
- MATLAB时频工具箱函数说明(包含工具箱的下载,安装,使用)
- IDEA之非常复制黏贴
- 谁说手工测试不香了?25k不比二流的开发美滋滋
- 单页面应用——SPA
- mnist 数据集 下载 训练 测试 pytorch
- 程序验证(五):一阶理论的过程
- oracle dbms advisor,通过shell定制dbms_advisor.quick_tune