大意:

[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. SortedSet接口

    TreeSet中实现了SortedSet接口,此接口主要用于排序操作,即实现此接口的子类都属于排序的子类. import java.util.Set; import java.util.SortedS ...

  2. Jasper(物联网网络支撑平台公司)的技术为什么这么牛逼?

    Jasper在这个行业积累了十几年,合作的运营商超过30个,合作的行业大咖包括了通用.空客.宝马.特斯拉等几千个行业龙头,还是有很多积累下来的优势的. 一是,Jasper通过积累下来的行业应用经验,针 ...

  3. Code First Migrations: Making __MigrationHistory not a system table

    https://blog.oneunicorn.com/2012/02/27/code-first-migrations-making-__migrationhistory-not-a-system- ...

  4. Request.GetOwinContext()打不到

    Although it's in the Microsoft.Owin.Host.SystemWeb assembly it is an extension method in the System. ...

  5. 关于Hash集合以及Java中的内存泄漏

    <学习笔记>关于Hash集合以及Java中的内存泄漏 标签: 学习笔记内存泄露hash 2015-10-11 21:26 58人阅读 评论(0) 收藏 举报  分类: 学习笔记(5)  版 ...

  6. 【Delphi】获取EIP

    var EIP: Cardinal; procedure GetEIP(); stdcall; asm pop eax; mov EIP,eax; push eax; end; procedure T ...

  7. reactjs 注意点

    render的return return前要留一空行 return的括号要分别各占一行,不能与html同行 return中的html必须要有顶层容器包裹 return中的循环不能用for,改用map方 ...

  8. SpringMVC框架的工作原理

    学习SpringMVC的工作原理,首先有三个要解决的问题: (1)DispathcherServlet框架如何截获特定的HTTP请求,交由SpringMVC处理? (2)位于Web层的Spring容器 ...

  9. 【8-15】Markdown语法学习

    学习Markdown语法 来源简书URL #,支持六级标题 列表 用-或*(指无序列表),有序列表直接1. 2. 3. 这样,中间有空格,可乱序(-+*都可,不能混合使用,混合使用为嵌套) 这是一个无 ...

  10. asp.net mvc ClaimsIdentity 授权研究 (还是测试版 有bug)

      安装 Microsoft.Owin.Host.SystemWeb Identity.Core Microsoft.Owin.Security.Cookies 在是startup.cs做如下修改 p ...