HDU 4081 Qin Shi Huang's National Road System (次小生成树算法)

链接:

http://acm.hdu.edu.cn/showproblem.php?pid=4081

题目:

Problem Description

During the Warring States Period of ancient China(476 BC to 221 BC), there were seven kingdoms in China ---- they were Qi, Chu, Yan, Han, Zhao, Wei and Qin. Ying Zheng was the king of the kingdom Qin. Through 9 years of wars, he finally conquered all six other kingdoms and became the first emperor of a unified China in 221 BC. That was Qin dynasty ---- the first imperial dynasty of China(not to be confused with the Qing Dynasty, the last dynasty of China). So Ying Zheng named himself "Qin Shi Huang" because "Shi Huang" means "the first emperor" in Chinese.

Qin Shi Huang undertook gigantic projects, including the first version of the Great Wall of China, the now famous city-sized mausoleum guarded by a life-sized Terracotta Army, and a massive national road system. There is a story about the road system: There were n cities in China and Qin Shi Huang wanted them all be connected by n-1 roads, in order that he could go to every city from the capital city Xianyang. Although Qin Shi Huang was a tyrant, he wanted the total length of all roads to be minimum,so that the road system may not cost too many people's life. A daoshi (some kind of monk) named Xu Fu told Qin Shi Huang that he could build a road by magic and that magic road would cost no money and no labor. But Xu Fu could only build ONE magic road for Qin Shi Huang. So Qin Shi Huang had to decide where to build the magic road. Qin Shi Huang wanted the total length of all none magic roads to be as small as possible, but Xu Fu wanted the magic road to benefit as many people as possible ---- So Qin Shi Huang decided that the value of A/B (the ratio of A to B) must be the maximum, which A is the total population of the two cites connected by the magic road, and B is the total length of none magic roads. Would you help Qin Shi Huang? A city can be considered as a point, and a road can be considered as a line segment connecting two points.

Input

The first line contains an integer t meaning that there are t test cases(t <= 10). For each test case: The first line is an integer n meaning that there are n cities(2 < n <= 1000). Then n lines follow. Each line contains three integers X, Y and P ( 0 <= X, Y <= 1000, 0 < P < 100000). (X, Y) is the coordinate of a city and P is the population of that city. It is guaranteed that each city has a distinct location.

Output

For each test case, print a line indicating the above mentioned maximum ratio A/B. The result should be rounded to 2 digits after decimal point.

Sample Input

2 4 1 1 20 1 2 30 200 2 80 200 1 100 3 1 1 20 1 2 30 2 2 40

Sample Output

65.00
70.00

Source

2011 Asia Beijing Regional Contest

题目大意:

有n个城市,秦始皇要修用n-1条路把它们连起来,要求从任一点出发,都可以到达其它的任意点。秦始皇希望这所有n-1条路长度之和最短。然后徐福突然有冒出来,说是他有魔法,可以不用人力、财力就变出其中任意一条路出来。

秦始皇希望徐福能把要修的n-1条路中最长的那条变出来,但是徐福希望能把要求的人力数量最多的那条变出来。对于每条路所需要的人力,是指这条路连接的两个城市的人数之和。

本栏目更多精彩内容:http://www.bianceng.cn/Programming/sjjg/

最终,秦始皇给出了一个公式,A/B,A是指要徐福用魔法变出的那条路所需人力, B是指除了徐福变出来的那条之外的所有n-2条路径长度之和,选使得A/B值最大的那条。

分析与总结

为了使的A/B值最大,首先是需要是B尽量要小,所以可先求出n个城市的最小生成树。然后,就是决定要选择那一条用徐福的魔法来变。

因此,可以枚举每一条边,假设最小生成树的值是MinMST, 而枚举的那条边长度是w[i][j],  如果这一条边已经是属于最小生成树上的,那么最终式子的值是A/(MinMST-w[i][j])。如果这一条不属于最小生成树上的, 那么添加上这条边,就会有n条边,那么就会使得有了一个环,为了使得它还是一个生成树,就要删掉环上的一棵树。 为了让生成树尽量少,那么就要删掉除了加入的那条边以外,权值最大的那条路径。 假设删除的那个边的权值是path[i][j], 那么就是A/(MinMST-path[i][j]).

解这题的关键也在于怎样求出次小生成树。

以下摘自网上资料:

[次小生成树]

类比上述次短路径求法,很容易想到一个“枚举删除最小生成树上的每条边,再求最小生成树”的直观解法。如果用Prim+堆,每次最小生成树时间复杂度为O(N*log(N+M) + M),枚举删除有O(N)条边,时间复杂度就是O(N^2*log(N+M) + N*M),当图很稠密时,接近O(N^3)。这种方法简易直观,但我们有一个更简单,而且效率更高的O(N^2+M)的解法,下面介绍这种方法。

首先求出原图最小生成树,记录权值之和为MinST。枚举添加每条不在最小生成树上的边(u,v),加上以后一定会形成一个环。找到环上权值第二大的边(即除了(u,v)以外的权值最大的边),把它删掉,计算当前生成树的权值之和。取所有枚举修改的生成树权值之和的最小值,就是次小生成树。

具体实现时,更简单的方法是从每个节点i遍历整个最小生成树,定义F[j]为从i到j的路径上最大边的权值。遍历图求出F[j]的值,然后对于添加每条不在最小生成树中的边(i,j),新的生成树权值之和就是MinST + w(i,j) – F[j],记录其最小值,则为次小生成树。

该算法的时间复杂度为O(N^2 + M)。由于只用求一次最小生成树,可以用最简单的Prim,时间复杂度为O(N^2)。算法的瓶颈不在求最小生成树,而在O(N^2+M)的枚举加边修改,所以用更好的最小生成树算法是没有必要的。

求解次小生成树的算法:

约定:由T 进行一次可行交换得到的新的生成树所组成的集合,称为树T的邻集,记为N(T)。

定理 3:设T是图G的最小生成树,如果T1满足ω(T1)=min{ω(T’)| T’∈N(T)},则T1是G

的次小生成树。

证明:如果 T1 不是G 的次小生成树,那么必定存在另一个生成树T’,T’=T 使得

ω(T)≤ω(T’)<ω(T1),由T1的定义式知T不属于N(T),则

E(T’)\E(T)={a1,a2

1,……,at},E(T)\E(T’)={b1,b2,……,bt},其中t≥2。根据引理1 知,存在一

个排列bi1,bi2,……,bit,使得T+aj-bij仍然是G 的生成树,且均属于N(T),所以ω(aj)≥ω(bij),

所以ω(T’)≥ω(T+aj-bij)≥ω(T1),故矛盾。所以T1是图G 的次小生成树。

通过上述定理,我们就有了解决次小生成树问题的基本思路。

首先先求该图的最小生成树T。时间复杂度O(Vlog2V+E)

然后,求T的邻集中权值和最小的生成树,即图G 的次小生成树。

如果只是简单的枚举,复杂度很高。首先枚举两条边的复杂度是O(VE),再判断该交换是否

可行的复杂度是O(V),则总的时间复杂度是O(V2E)。这样的算法显得很盲目。经过简单的

分析不难发现,每加入一条不在树上的边,总能形成一个环,只有删去环上的一条边,才能

保证交换后仍然是生成树,而删去边的权值越大,新得到的生成树的权值和越小。我们可以

以此将复杂度降为O(VE)。这已经前进了一大步,但仍不够好。

回顾上一个模型——最小度限制生成树,我们也曾面临过类似的问题,并且最终采用动态规

划的方法避免了重复计算,使得复杂度大大降低。对于本题,我们可以采用类似的思想。首

先做一步预处理,求出树上每两个结点之间的路径上的权值最大的边,然后,枚举图中不在

树上的边,有了刚才的预处理,我们就可以用O(1)的时间得到形成的环上的权值最大的边。

如何预处理呢?因为这是一棵树,所以并不需要什么高深的算法,只要简单的BFS 即可。

预处理所要的时间复杂度为O(V2)。

这样,这一步时间复杂度降为O(V2)。
综上所述,次小生成树的时间复杂度为O(V2)。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索and
, of
, Magic
, The
, that
次小生成树
hdu4081、qinhuang、huangqin、qinhuangditu、leilingshuangqin,以便于您获取更多的相关知识。

时间: 2024-10-24 22:54:58

HDU 4081 Qin Shi Huang's National Road System (次小生成树算法)的相关文章

《程序设计解题策略》——1.2 利用最小生成树及其扩展形式解题

1.2 利用最小生成树及其扩展形式解题 设G=(V,E,ω)是连通的有权无向图(节点集为V,边集为E,边权集为ω),连通图G中包含所有节点,且只有V-1条边的连通子图即为G的生成树.边权值和最小的生成树称为最小生成树.在现实生活中,最小生成树的原理和算法有着广泛的应用.程序设计竞赛中与最小生成树有关的试题一般有两类: 1) 构建最小生成树. 2) 应用最小生成树原理优化算法. 本节除了深入研讨最小生成树的性质和求解方法外,还给出了三种特殊类型生成树: 1) 最优比率生成树. 2) 最小k度限制生

HDU 1301(MST)

Jungle Roads Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2932 Accepted Submission(s): 2074 Problem Description The Head Elder of the tropical island of Lagrishan has a problem. A burst of forei

C# 汉字转拼音实例(支持GB2312字符集中所有汉字)_C#教程

GB2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个. 分区表示  GB 2312中对所收汉字进行了"分区"处理,每区含有94个汉字/符号.这种表示方式也称为区位码.  1)01-09区为特殊符号. 2)16-55区为一级汉字,按拼音排序.  3)56-87区为二级汉字,按部首/笔画排序. 4)10-15区及88-94区则未有编码. 也就是说二级汉字与拼音不存在联系.这样网上大部分汉字转拼音类只能正确获取部分汉字的拼音(一级汉字).只有小数的3000多一点汉

POJ题目分类

初期: 一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.      (4)递推.      (5)构造法.(poj3295)      (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996) 二.图算法:      (1)图的深度优先遍历和广度优先遍历.      (2)最短路径算法(dijkstra,bellman-ford

Windows CE下中文输入法编辑器

CE包含了一种简体中文输入法编辑器,如果不想编写自己的输入法编辑器,那么可以直接调用默认的.在讲解中文输入法编辑器之前顺便提一下国际化(Internationalization),中文输入法及输入法编辑器只是国际化组件的一小部分.国际化是编写面向不同语言用户的软件过程中一个重要环节,CE的国际化组件包含很多小的组件 . 下表描述了组件的名称.功能: 名称 功能 Agfa字体压缩 支持字体压缩 字体版本 因为东亚字体占据内存较大,此组件提供了用于选择不同大小字体文件的选项 手写识别 手写识别引擎

最小生成树【完结】

第一题 hdu 1232 畅通工程 点击打开hdu 1232 思路:模板题 点击查看代码 第二题 hdu 1233 还是畅通工程 点击打开hdu 1233 思路:模板题 点击查看代码 第三题 uva 10034 Freckles 点击打开uva 10034 思路:模板题 点击查看代码 第四题 uva 10397 Connect the Campus 点击打开uva 10397 思路:模板题 点击查看代码 第五题 uva 10369 Arctic Network 点击打开uva 10369 思路:

机器数据分析就地安全监视

提高网络物理安全和增加安全系统的努力已形成一个不断发展的行业,该行业致力于超越这一挑战.闭路电视模拟摄像机正快速被更高清晰度.功能丰富的数字摄像机所取代,以便实现基于图像的安全系统.相比之下,数字摄像机更灵活.更智能,能够与云服务和数据分析更紧密地集成在一起.本文将介绍就地安全监视,它与基于云的数据分析相结合,使得在没有电源或网络基础架构的区域快速部署监视成为了可能. 在不久的将来,我们可能依赖于快速演变的 "机器到机器" 基础架构,它的高级感知能力与人类的能力不相上下(有时甚至超越了

手术不再需要人类医生只是时间问题?这个STAR机器人正在让预言成真

曾经,说到机器人就会联想起它们冰冷机械零件堆砌出的外表,生硬的机器语言,受人类操控为人类服务;现如今,人工智能等技术赋予机器人以"个性",一个个形态万千,功能迥异的机器人出现在了人们的日常生活中. 本文将聚焦医疗机器人领域,美国著名肿瘤外科专家.虚拟手术创始人Dr. Shafi Ahmed曾表示:"手术机器人替代外科医生只是个时间问题,未来外科手术室里不会再有一群医生从早到晚有做不完的手术了." 你知道么?早在1985年,美国人就尝试用Puma560工业机器人辅助进

《ADOBE AFTER EFFECTS CS5标准培训教材》——第1章 数字影视合成基础与After Effects概述 1.1 数字影视合成基础与应用

第1章 数字影视合成基础与After Effects概述 学习要点: 掌握数字合成的基本概念,了解其原理和实际应用领域的相关知识 了解After Effects的发展历史和After Effects CS5的新增功能 解After Effects CS5的工作流程 使用帮助及各种形式的共享资源 1.1 数字影视合成基础与应用 从动画诞生的那一刻起,人们就不断探求一种能够存储.表现和传播动态画面信息的方式.在经历了电影和模拟信号电视之后,数字影视技术迅速发展起来,伴随着不断扩展的应用领域,其技术手