COGS 2416.[HZOI 2016]公路修建 & COGS 2419.[HZOI 2016]公路修建2 题解
大意:
[HZOI 2016]公路修建
给定一个有n个点和m-1组边的无向连通图,其中每组边都包含一条一级边和一条二级边(连接的顶点相同),同一组边中的一级边权值一定大于等于二级边,另外给出一个数k(k<=n-1),求原图的一个生成树,使得其中至少包含k条一级边且最大的边权值尽量小。
[HZOI 2016]公路修建2
和上一题基本一样,但是求出的不一定是生成树(也就是说可以有多于n-1条边,只要让图连通即可),在此前提下仍然使得其中至少包含k条一级边且最大的边权值尽量小。
解法:
两题均可以使用贪心算法解决,但是由于两题对最终总边数的要求不同,使用的贪心算法也就差别甚远。
对于第一题,可以先对一级边跑一遍Kruskal建出k条边,然后再对二级边跑一遍Kruskal建出剩下的边。
这个算法比较直观,但正确性需要我们进行证明。不过dbw神犇确实给出了一个证明,在此致以崇高的敬意。
这里给出我自己的证明,首先分两种情况:
1.最大边是一级边
这样用Kruskal求出的不完整生成树中包含的一定是尽量小的k条一级边,因此这种情况下这个算法得到的解不会比最优解更差。
2.最大边是二级边
如果第二遍的Kruskal求出的最大边可以用一条比它更小的边替代,那么显然这条边不是二级边(因为第二遍Kruskal已经保证了这一点),但如果它是一级边的话,用它对应的二级边替换最大边显然不会比用一级边替代更差,但这种情况已经被推翻,因此这种情况下这个算法的解也不会比最优解更差。
综上所述,此贪心算法成立。
对于第二题,可以先对二级边直接跑一遍Kruskal求出最小生成树,再把权值前k小的一级边加入方案中即可。
这个的正确性更加显然,不过还是给出证明。
仍然分两种情况:
1.最大边是一级边
第二步已经保证了所选的一级边的方案不会存在更优解,这种情况下此算法正确。
2.最大边是二级边
第一步已经保证了所选的二级边方案不会存在更优解,故这种情况下此算法也正确。
综上所述,此贪心算法成立。
两题的解法叙述到此结束。
后记:
这两题题面极其雷同,解法也有共通之处(都是贪心+最小生成树),但造成两题最终算法产生如此巨大的差别的原因,就在于两题的一个小差距:
第一题要求所求方案必须是生成树,第二题则只要求连通,边可以多选(这也是为什么不考虑一级边和二级边重了等情况的原因)。
如果质疑为什么第一题的算法不可以解第二题,请参见第二题的样例。
这两个题告诉我们,一定要好好读题,要不然看见第二题之后没好好读题直接按生成树写的就WA大吉了。
顺便一提,这两个题都可以用二分答案,复杂度和贪心不相上下。
支持你的
最初是兴趣
后来是梦想
最终是使命
COGS 2416.[HZOI 2016]公路修建 & COGS 2419.[HZOI 2016]公路修建2 题解的更多相关文章
- cogs——2419. [HZOI 2016]公路修建2
		
2419. [HZOI 2016]公路修建2 ★☆ 输入文件:hzoi_road2.in 输出文件:hzoi_road2.out 简单对比时间限制:1 s 内存限制:128 MB [题 ...
 - cogs——2416. [HZOI 2016]公路修建
		
2416. [HZOI 2016]公路修建 ★☆ 输入文件:hzoi_road.in 输出文件:hzoi_road.out 简单对比时间限制:1 s 内存限制:128 MB [题目描述 ...
 - office 2016 专业增强版 和 visio 2016 专业版 下载安装(附带激活工
		
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://babyshen.blog.51cto.com/8405584/1697910 o ...
 - 2016 湖南省省赛 Problem A: 2016
		
Problem A: 2016 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 296 Solved: 171 Description 给出正整数 n ...
 - 2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)
		
摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5 ...
 - 激活JetBrains PhpStorm 2016.3.2和JetBrains WebStorm 2016.3.2
		
1.打开 phpstorm 2.在激活界面选择license server 在线激活方式 输入:http://idea.imsxm.com/ 3.激活成功,打开使用
 - Team Contests - Warmup(2016年多校热身赛,2016年黑龙江省赛)
		
Team Contests - Warmup A 题意:... 思路:不会 代码:... 随机 B 题意:给n个点,问是否有一个圆上有最少n/3个点 思路:随机大法好. 代码:... 递推 C 题意: ...
 - stand up meeting 1/15/2016 && work of weekend 1/16/2016~1/17/2016
		
part 组员 工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 组内对生词卡片又重新进行了讨论:准备最后的发布和整个开发的整理 ...
 - [HZOI 2016]公路修建
		
[题目描述] OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Association组织成立了,旨 ...
 
随机推荐
- How to read a scientific paper
			
How to read a scientific paper Nothing makes you feel stupid quite like reading a scientific journal ...
 - paramiko模拟ansible远程执行命令
			
主模块 #!/usr/bin/env python from multiprocessing import Process import paramiko import time import sys ...
 - ES6标准
			
1. ES6标准感觉越来越向传统语言靠拢了,以后写到ES6的标准都记录下: ,,]; // =>操作符 array.forEach(v => console.log(v)); 是不是简化了 ...
 - OBJ Loader Source Code
			
https://github.com/ChrisJansson/ObjLoader http://www.codeproject.com/Articles/798054/SimpleScene-d-s ...
 - ecshop 团购-》调取评论
			
涉及到的文件及代码:lib_insert.php,comments.lbi,{insert name='comments' type=$type id=$id} html代码: <blockqu ...
 - ASP.NET Padding Oracle Attack EXP
			
#!/usr/bin/perl## PadBuster v0.3 - Automated script for performing Padding Oracle attacks# Brian Hol ...
 - html、css杂记
			
1:浮动 <div style="float: left"> 2:清除浮动,把父div撑起来 <div style="clear:both"& ...
 - vim基础命令
			
2015-06-04 by komilevim基础命令 打开一个文件 vim index.php 几种模式说明Normal Mode也就是最一般的普通模式,默认进入vim之后,处于这种模式.Inser ...
 - 前端性能利器——dynatrace ajax edition
			
因为最近的工作跟性能分析有关系,所以写个小总结. 顺带推荐两个我常用的小工具: 1.文件对比工具beyond compare,非常好用,对比.修改很简单.当然我只是用的试用版本.google一下官网下 ...
 - [译]通过IIS Request Filtering解决SQL Server CPU高的问题
			
原文http://www.peterviola.com/solving-sql-server-high-cpu-with-iis-request-filtering/ Top Queries by T ...