BestCoder Round #71 (div.1)题解
来源:互联网 发布:关键词优化是什么意思 编辑:程序博客网 时间:2024/06/03 16:48
BestCoder Round #71 (div.1)
1004 题目描述
我们可爱的KK有一道困难的社会性题目:他所在的地区发生了一场大地震(如此老套的出题思路~!),一共有N( 2<= N<= 2000)个城市受到了牵连,N个城市间所有道路都已损坏,现在KK受委托要重修这些道路。然而,经过KK的实地考察发现,很多城市间道路的地基都被破坏了,无法再重修道路,因此可供修建的道路只有MM(0≤M≤15000)条。KK要用尽量少的道路将所有的城市联通起来,在此条件下,他希望选择一种方案,使得方案中最贵道路的价格和最便宜道路的价格的差值最小。
思路
BC的题解上写了这么一句:
我们知道,最小生成树有一个性质是最大边最小。
我咋就不知道这个!(其实就是离散没学好)
有了这句话,我们就可以枚举最小边,这样的生成树一定包含答案,再进行一点优化:
引用http://bestcoder.hdu.edu.cn/
可以发现我们每次枚举后都重新求了最小生成树,事实上这是不必要的。
考虑从大到小枚举生成树的最小边,我们要做的实际上是每次加入一条边,维护当前图的最小生成树。
加入一条边时,我们需要判断这条边能否与之前的边构成环。
- I 若能构成环,用该边替代环中最大边一定更优;
- II 若不能构成环,直接加入该边即可。
以上是BC题解写的一部分,找环中最大边用DFS实现,但是目前我还是没有思路。
====================(我是分割线)3分钟后================
应该是直接暴力DFS就好,生成树里边数为N-1,所以DFS的时间复杂度为O(N),枚举最小边这样时间复杂度为O(MlogM(快排)+NM)
1 0
- BestCoder Round #71 (div.1)题解
- BestCoder Round #79 (div.1) Claris and XOR 题解。。。
- BestCoder Round #11 (Div. 2)题解集合
- BestCoder Round #11 (Div. 2) 前三题题解
- BestCoder Round #11 (Div. 2) 题解
- BestCoder Round #54 (div.2) 题解
- BestCoder Round #71 (div.2)
- BestCoder Round #54 (div.1)
- BestCoder Round #68 (div.1)
- BestCoder Round #59 (div.1)
- BestCoder Round #58 (div.2) HDOJ5494 5495 5496 5497题解
- BestCoder Round #74 (div.2) 题面&题解
- BestCoder Round #74 (div.2) ~' T1. LCP Array ' 题解
- BestCoder Round #4 题解
- BestCoder Round #18题解
- 【BestCoder Round #22】题解、
- BestCoder Round #22 【题解】
- BestCoder Round #84 题解
- 由C#编写的多线程异步抓取网页的网络爬虫控制台程序
- 刷题、OJ 1337: 运动员分组
- Java自定义注解的语法要求
- NSURLSession
- 蓝桥杯 - 周期字串
- BestCoder Round #71 (div.1)题解
- HibernaterUtil工具类
- 搭建基于qemu + eclipse的kernel调试环境(by quqi99)
- 表单组件定义
- 在线记录简述
- Android使用RecyclerView分隔线问题
- Sublime Text 3 全程详细图文
- HttpURLConnection 访问网页异常 问题的解决方法
- 大数据IMF传奇行动 IDEA导入spark源代码! 走入spark源代码世界!