大意:

[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 题解的更多相关文章

  1. cogs——2419. [HZOI 2016]公路修建2

    2419. [HZOI 2016]公路修建2 ★☆   输入文件:hzoi_road2.in   输出文件:hzoi_road2.out   简单对比时间限制:1 s   内存限制:128 MB [题 ...

  2. cogs——2416. [HZOI 2016]公路修建

    2416. [HZOI 2016]公路修建 ★☆   输入文件:hzoi_road.in   输出文件:hzoi_road.out   简单对比时间限制:1 s   内存限制:128 MB [题目描述 ...

  3. office 2016 专业增强版 和 visio 2016 专业版 下载安装(附带激活工

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://babyshen.blog.51cto.com/8405584/1697910 o ...

  4. 2016 湖南省省赛 Problem A: 2016

    Problem A: 2016 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 296  Solved: 171 Description  给出正整数 n ...

  5. 2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)

    摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5 ...

  6. 激活JetBrains PhpStorm 2016.3.2和JetBrains WebStorm 2016.3.2

    1.打开 phpstorm 2.在激活界面选择license server 在线激活方式 输入:http://idea.imsxm.com/ 3.激活成功,打开使用

  7. Team Contests - Warmup(2016年多校热身赛,2016年黑龙江省赛)

    Team Contests - Warmup A 题意:... 思路:不会 代码:... 随机 B 题意:给n个点,问是否有一个圆上有最少n/3个点 思路:随机大法好. 代码:... 递推 C 题意: ...

  8. stand up meeting 1/15/2016 && work of weekend 1/16/2016~1/17/2016

    part 组员                工作              工作耗时/h 明日计划 工作耗时/h    UI 冯晓云  组内对生词卡片又重新进行了讨论:准备最后的发布和整个开发的整理 ...

  9. [HZOI 2016]公路修建

    [题目描述] OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Association组织成立了,旨 ...

随机推荐

  1. JavaWeb学习笔记——开发动态WEB资源(一)Java程序向浏览器输出数据

    开发一个动态web资源,即开发一个Java程序向浏览器输出数据,需要完成以下2个步骤: 1.编写一个Java类,实现Servlet接口 开发一个动态web资源必须实现javax.servlet.Ser ...

  2. Unable to find vcvarsall.bat的解决办法

    明年绝对买MAC电脑,这一两天安装paramiko,真是操碎了心. 安装paramiko时报error: Unable to find vcvarsall.bat这种错误,网上找了各种方法啊,解决的办 ...

  3. C++11

    http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list http://www.open-std.o ...

  4. php json_decode

    php代码 <?php $data='[{"Name":"a1","Number":"123","Con ...

  5. 获取<img src="sdf.jpg" Big="sf.jpg">中的big的值

    原代码: <img src="sdf.jpg" Big="sf.jpg" onclick="getsrc($(this).attr(" ...

  6. MVC实现动态二级域名

    前段时间,一个朋友问我ASP.NET MVC下实现动态二级域名的问题.跟他聊了一些解决方案,这里也总结一下,以供参考. 相信大家都发现类似58同城这样的网站,成都的网址是cd.58.com 上海的是s ...

  7. Session共享的解决方案

    http://www.cnblogs.com/xinhaijulan/archive/2010/08/21/1805116.html Session共享的解决方案 1.客户端SessionID值唯一: ...

  8. android 点击屏幕关闭 软键盘

    //点击屏幕 关闭输入弹出框 @Override public boolean onTouchEvent(MotionEvent event) { InputMethodManager im = (I ...

  9. yii2 widget示例

    <?php namespace app\components; use yii\base\Widget; use yii\helpers\Html; class RctReplyWidget e ...

  10. Mac终端Terminal调用Sublime Text

    Sublime Text 本身提供了命令行工具, 只需要在 Terminal 中输入以下内容就行了 sudo ln -s /Applications/Sublime\ Text.app/Content ...