HDU 4081—— Qin Shi Huang's National Road System——————【次小生成树、prim】
Qin Shi Huang's National Road System
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5608 Accepted Submission(s): 1972

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.
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.
题目大意:给你n,表示城市个数,然后给你n个城市的坐标及该城市中的人口数量。让连接这n个城市用n-1条边连接,且距离和最短,距离越长花费越大。数字A表示,用魔法路连接的两个城市的人口的和,B表示除了该魔法路以外的其他路的长度和。求A/B的比率最小值是多少。魔法路没有路长。
解题思路:考虑让除了魔法路以外的路长和最小,那么我们可以从最小生成树中删除一条最长路径。枚举删除任意两点间的最长路,更新出最小比率。
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<iostream>
#include<vector>
#include<math.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int maxn = 1010;
double cost[maxn][maxn];
struct Coor{
double x, y;
int peo;
}cors[maxn];
double distan(Coor a,Coor b){
double dx,dy;
dx = a.x - b.x;
dy = a.y - b.y;
return sqrt( dx*dx + dy*dy );
}
int vis[maxn], pre[maxn] ,used[maxn][maxn];
double maxcost[maxn][maxn], lowc[maxn];
double prim(int n){
memset(vis,0,sizeof(vis));
memset(used,0,sizeof(used));
for(int i = 0; i <= n; i++){
for(int j = 0; j <= n; j++){
maxcost[i][j] = 0;
}
}
// memset(maxcost,0,sizeof(maxcost));
// memset(lowc,0,sizeof(lowc));
double retsum = 0;
vis[0] = 1;
for(int i = 0; i < n; i++){
lowc[i] = cost[0][i];
pre[i] = 0;
}
for(int i = 1; i < n; i++){
int s = -1;
double minc = 1.0*INF;
for(int j = 0; j < n; j++){
if(!vis[j] && lowc[j] < minc){
minc = lowc[j];
s = j;
}
}
if(s == -1){
return -1;
}
retsum += minc;
int pa = pre[s];
vis[s] = 1;
for(int j = 0; j < n; j++){
if(vis[j]&&j != s){
maxcost[s][j] = maxcost[j][s] = max(maxcost[pa][j],cost[pa][s]);
}
}
used[s][pa] = used[pa][s] = 1;
for(int j = 0; j < n; j++){
if(!vis[j] && lowc[j] > cost[s][j]){
lowc[j] = cost[s][j];
pre[j] = s;
}
}
}
return retsum;
}
int main(){
int T,n;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(int i = 0; i <=n; i++){
for(int j = 0; j <= n; j++){
cost[i][j] = 1.0*INF;
}
}
for(int i = 0; i < n; i++){
scanf("%lf%lf%d",&cors[i].x,&cors[i].y,&cors[i].peo);
for(int j = 0; j < i; j++){
cost[i][j] = cost[j][i] = distan(cors[i],cors[j]);
}
}
double mst = prim(n);
double maxr = 0;
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
if(i == j) continue;
int tmp = (cors[i].peo + cors[j].peo);
if(!used[i][j]){
maxr = max( maxr, (1.0*tmp)/(mst-maxcost[i][j]));
}else{
maxr = max(maxr,(1.0*tmp)/(mst - cost[i][j]));
}
}
}
printf("%.2lf\n",maxr);
}
return 0;
}
HDU 4081—— Qin Shi Huang's National Road System——————【次小生成树、prim】的更多相关文章
- HDU 4081 Qin Shi Huang's National Road System 次小生成树变种
Qin Shi Huang's National Road System Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3 ...
- hdu 4081 Qin Shi Huang's National Road System (次小生成树的变形)
题目:Qin Shi Huang's National Road System Qin Shi Huang's National Road System Time Limit: 2000/1000 M ...
- HDU 4081 Qin Shi Huang's National Road System [次小生成树]
题意: 秦始皇要建路,一共有n个城市,建n-1条路连接. 给了n个城市的坐标和每个城市的人数. 然后建n-2条正常路和n-1条魔法路,最后求A/B的最大值. A代表所建的魔法路的连接的城市的市民的人数 ...
- HDU 4081 Qin Shi Huang's National Road System 最小生成树+倍增求LCA
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4081 Qin Shi Huang's National Road System Time Limit: ...
- hdu 4081 Qin Shi Huang's National Road System (次小生成树)
Qin Shi Huang's National Road System Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3 ...
- HDU4081 Qin Shi Huang's National Road System —— 次小生成树变形
题目链接:https://vjudge.net/problem/HDU-4081 Qin Shi Huang's National Road System Time Limit: 2000/1000 ...
- hdu 4081 Qin Shi Huang's National Road System 树的基本性质 or 次小生成树思想 难度:1
During the Warring States Period of ancient China(476 BC to 221 BC), there were seven kingdoms in Ch ...
- hdu 4081 Qin Shi Huang's National Road System(次小生成树prim)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4081 题意:有n个城市,秦始皇要修用n-1条路把它们连起来,要求从任一点出发,都可以到达其它的任意点. ...
- HDU - 4081 Qin Shi Huang's National Road System 【次小生成树】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4081 题意 给出n个城市的坐标 以及 每个城市里面有多少人 秦始皇想造路 让每个城市都连通 (直接或者 ...
随机推荐
- 在Repeater控件的OnItemDataBound获取数据源记录总数
Insus.NEt曾经有写过一篇<Repeater控件最后一笔记录高亮显示> ,它的实现是先宣告一个页面级的变量,然后在Data_Binding()方法内获取数据源的记录总数. 本篇是的重 ...
- 正经学C#_循环[do while,while,for]:[c#入门经典]
在c#中循环语句总共三种,do...while ,while,for这三种语句. 循环语句,是为了解决一些繁琐的计算.比如输出0-10这10个数字. 在不循环的情况下你可以能这么写 Console.W ...
- 【bzoj2434】: [Noi2011]阿狸的打字机 字符串-AC自动机-BIT
[bzoj2434]: [Noi2011]阿狸的打字机 x串在y串上的匹配次数就是y在自动机所有节点上能够通过fail走到x最后一个节点的个数 (就是y串任意一个前缀的后缀能匹配到x的个数)和[bzo ...
- HDU4624 Endless Spin(概率&&dp)
2013年多校的题目,那个时候不太懂怎么做,最近重新拾起来,看了一下出题人当初的解题报告,再结合一下各种情况的理解,终于知道整个大致的做法,这里具体写一下做法. 题意:给你一段长度为[1..n]的白色 ...
- Servlet中Web.xml的配置详解(一)
1 定义头和根元素 部署描述符文件就像所有XML文件一样,必须以一个XML头开始.这个头声明可以使用的XML版本并给出文件的字符编码.DOCYTPE声明必须立即出现在此头之后.这个声明告诉服务器适用的 ...
- js 时间日期大小对比
var oDate1 = new Date(); var oDate2 = new Date("2019/01/07 10:00:00"); if (oDate1.getTime( ...
- aspectj 与 spring 自定义注解
** * ErrorCode: * * @author yangzhenlong * @since 2016/7/21 */ @Target({ElementType.METHOD}) @Retent ...
- JQuery判断页面是否按下了Enter键
$('#someTextBox').keypress(function(event){ var keycode = (event.keyCode ? event.keyCode : event.whi ...
- Hdu 5862 Counting Intersections(有n条线段,每一条线段都是平行于x轴或者y轴,问有多少个交点+树状数组区间求和单点跟新)
传送门:Hdu 5862 Counting Intersections 题意:有n条线段,每一条线段都是平行于x轴或者y轴,问有多少个交点 分析: 基本的操作流程是:先将所有的线段按照横树坐标x按小的 ...
- Oracle table-lock的5种模式
Oracle中的锁定可以分为几类: 1.DML lock(data lock), 2.DDL lock(dictionary lock) 3.internal lock/latch. DML lock ...