hdu4081 次小生成树变形
pid=4081">http://acm.hdu.edu.cn/showproblem.php?pid=4081
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.
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.
2
4
1 1 20
1 2 30
200 2 80
200 1 100
3
1 1 20
1 2 30
2 2 40
65.00
70.00
/**
hdu4081 次小生成树变形
题目大意:给定n个城市,每一个城市有ai个人,在这些城市间修路,已知能够免费修一条路。其它路费用为长度,求免费路连接城市人口和修路总费用比值的最大值
解题思路:我们要枚举每条路作为免费路的情况。能够先求出最小生成树sum。假设枚举的边在生成树上就(ai+a[j])/(sum-该边)。假设边不在生成树上
(ai+aj)/(sum-mlen[i][j]) mlen是加上当前边到最小生成树后必定组成的环上除当前边外最大权值边的权值。事实上就是一个次小生成树求解
*/
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <math.h>
using namespace std;
const int maxn=1010;
const double inf=1e14; struct note
{
int x,y,z;
}p[maxn]; double a[maxn][maxn],dis[maxn];
int pre[maxn],n; int flag[maxn][maxn],vis[maxn];
double mlen[maxn][maxn]; double prim(int u)
{
double sum=0;
memset(flag,0,sizeof(flag));
memset(vis,0,sizeof(vis));
memset(mlen,0,sizeof(mlen));
for(int i=1; i<=n; i++)
{
dis[i]=a[u][i];
pre[i]=u;
}
vis[u]=1;
for(int i=1; i<n; i++)
{
double minn=inf;
int v=-1;
for(int j=1; j<=n; j++)
{
if(!vis[j]&&dis[j]<minn)
{
v=j;
minn=dis[j];
}
}
if(v!=-1)
{
sum+=dis[v];
flag[v][pre[v]]=flag[pre[v]][v]=1;
vis[v]=1;
for(int k=1; k<=n; k++)
{
if(vis[k]&&k!=v)
{
mlen[v][k]=mlen[k][v]=max(mlen[k][pre[v]],dis[v]);
}
if(!vis[k]&&a[v][k]<dis[k])
{
dis[k]=a[v][k];
pre[k]=v;
}
}
}
}
return sum;
} double lenth(int x,int y,int u,int v)
{
return sqrt((x-u)*(x-u)+(y-v)*(y-v));
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].z);
}
for(int i=1; i<= n; i++)
{
a[i][i]=0;
for(int j=i+1; j<=n; j++)
{
a[i][j]=a[j][i]=lenth(p[i].x,p[i].y,p[j].x,p[j].y);
}
}
double sum=prim(1);
double ans=-1;
for(int i=1; i<=n; i++)
{
for(int j=i+1; j<=n; j++)
{
if(flag[i][j])
ans=max(ans,(p[i].z+p[j].z)/(sum-a[i][j]));
else
ans=max(ans,(p[i].z+p[j].z)/(sum-mlen[i][j]));
}
}
printf("%.2lf\n",ans);
}
return 0;
}
hdu4081 次小生成树变形的更多相关文章
- 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 ...
- hdu4081次小生成树
先求一遍最小生成树,然后遍历所有边,如果这条边在最小生成树中就直接减去这条边的距离,如果不在最小生成树中,那么就构成了一个环,此时需要减去最小生成树中最大的边,即求次小生成树时的maxx, 有一点要注 ...
- hdu4081 次小生成树
题意:有n个点,n-1条边.现在徐福可以让一条边无消耗建立,即魔法边.B表示除魔法边之外的的其他边的消耗值和,A表示这条魔法边相连的2个集合中都选一点,这两点的最大值,现在要求A/B最大. 方法:因为 ...
- hdu4081 Qin Shi Huang's National Road System 次小生成树
先发发牢骚:图论500题上说这题是最小生成树+DFS,网上搜题解也有人这么做.但是其实就是次小生成树.次小生成树完全当模版题.其中有一个小细节没注意,导致我几个小时一直在找错.有了模版要会用模版,然后 ...
- HDU-4081.Qinshihuang'sNationalRoadSystem(次小生成树变种)
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 [次小生成树]
题意: 秦始皇要建路,一共有n个城市,建n-1条路连接. 给了n个城市的坐标和每个城市的人数. 然后建n-2条正常路和n-1条魔法路,最后求A/B的最大值. A代表所建的魔法路的连接的城市的市民的人数 ...
- HDU 4081Qin Shi Huang's National Road System(次小生成树)
题目大意: 有n个城市,秦始皇要修用n-1条路把它们连起来,要求从任一点出发,都可以到达其它的任意点.秦始皇希望这所有n-1条路长度之和最短.然后徐福突然有冒出来,说是他有魔法,可以不用人力.财力就变 ...
- POJ1679 The Unique MST[次小生成树]
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 28673 Accepted: 10239 ...
- The Unique MST(次小生成树)
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 22335 Accepted: 7922 Description Give ...
随机推荐
- UVa 442 (栈) Matrix Chain Multiplication
题意: 给出一个矩阵表达式,计算总的乘法次数. 分析: 基本的数学知识:一个m×n的矩阵A和n×s的矩阵B,计算AB的乘法次数为m×n×s.只有A的列数和B的行数相等时,两个矩阵才能进行乘法运算. 表 ...
- [NOI2005] 维修数列
1500: [NOI2005]维修数列 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 8397 Solved: 2530 Description In ...
- 完全用xml实现imageview点击换一张图片
<ImageView android:layout_width="60dp" android:layout_height="60dp" android:b ...
- vmware 虚拟机 mount :no medium found解决方法
使用vmware时,在虚拟机设置里,设置CD/DVD为系统镜像,挂载时,有时会有找不到介质或者no medium found之类的提示.根本原因是iso镜像并没有加载到虚拟机系统内.解决办法: 首先确 ...
- (十一)学习CSS之float属性
参考:http://www.w3school.com.cn/cssref/pr_class_float.asp 定义和用法 float 属性定义元素在哪个方向浮动.以往这个属性总应用于图像,使文本围绕 ...
- Query Profiler 和Explain 用法详解
一.Query Profiler MySQL 的Query Profiler 是一个使用非常方便的Query 诊断分析工具,通过该工具可以获取一条Query 在整个执行过程中多种资源的消耗情况,如C ...
- spring+mybatis 多数据源整合
<!-- 数据源配置 --> <bean id="ds1" class="org.apache.commons.dbcp.BasicDataSour ...
- 【转】ubuntu 编码 UTF-8 GBK GB18030
添加编码支持 sudo locale-gen zh_CN.GBK sudo locale-gen zh_CN.GB2312 sudo locale-gen zh_CN.GB18030 2.更新一下lo ...
- Robotium 系列(2) - 简单介绍Monkey和MonkeyRunner
除了Robotium,Android还有其他的自动化测试方法,比如Monkey和MonkeyRunner. 这里就做一个简单的介绍和使用方法. 本文提纲: 1. Android SDK以及SDK中的工 ...
- Puppet学习:pp文件权限问题
由于内网的Puppet还是在测试中,所以对文件权限等内容未做过多关注. 今天报了错误: Error: Could not retrieve catalog from remote server: Er ...