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/32768 K (Java/Others)

【Sample Output】
65.00
70.00
【题意】
秦国有n个城市构成,每个城市都有一定的人口。现在要修路,要求最终修成的路花费最少代价使得所有的城市都连通。然后修路的时候可以使用一个魔法,免去一条路的费用,最终结果要使使用了魔法的那条路两端的城市总人口数除以剩下所有路的长度最大。
/* ***********************************************
MYID : Chen Fan
LANG : G++
PROG : 4081
************************************************ */ #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>
#include <bitset> using namespace std; typedef struct pnod
{
int x,y,p;
} pnode;
pnode p[]; typedef struct nod
{
int a,b;
double c;
friend bool operator < (nod a,nod b)
{
return a.c>b.c;
}
} node; node edge[];
int start[],num[]; bool op(node a,node b)
{
if (a.a==b.a) return a.c<b.c;
else return a.a<b.a;
} node ntoh(int a,int b,double c)
{
node x;
x.a=a;
x.b=b;
x.c=c;
return x;
} double maxx[][];
bitset<> inway[]; double prim(int s,int n)
{
/**/
int list[],listail=;
list[]=s;
/**/
priority_queue<node> heap;
while (!heap.empty()) heap.pop();
bitset<> flag;
flag.reset();
flag[s]=;
double ans=;
memset(maxx,,sizeof(maxx));
for (int i=;i<num[s];i++) heap.push(edge[start[s]+i]); for (int i=;i<n;i++)
{
node now=heap.top();
heap.pop();
while (flag[now.b])
{
now=heap.top();
heap.pop();
}
/**/
for (int j=;j<=listail;j++)
{
maxx[list[j]][now.b]=max(maxx[list[j]][now.a],now.c);
maxx[now.b][list[j]]=maxx[list[j]][now.b];
}
listail++;
list[listail]=now.b;
/**/
flag[now.b]=true;
ans+=now.c;
for (int j=;j<num[now.b];j++)
if (!flag[edge[start[now.b]+j].b]) heap.push(edge[start[now.b]+j]);
} return ans;
} double getdis(int x,int y)
{
return sqrt((p[x].x-p[y].x)*(p[x].x-p[y].x)+(p[x].y-p[y].y)*(p[x].y-p[y].y));
} int main()
{
freopen("4081.txt","r",stdin); int t;
scanf("%d",&t);
for (int tt=;tt<=t;tt++)
{
int n;
scanf("%d",&n);
for (int i=;i<=n;i++) scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].p); int m=;
for (int i=;i<=n;i++)
{
start[i]=m+;
num[i]=n-;
for (int j=;j<=n;j++)
if (i!=j)
{
m++;
edge[m].a=i;
edge[m].b=j;
edge[m].c=getdis(i,j);
}
} double sum=prim(,n); double ma=;
for (int i=;i<=m;i++)
{
double temp=(p[edge[i].a].p+p[edge[i].b].p)/(sum-maxx[edge[i].a][edge[i].b]);
if (ma<temp) ma=temp;
} printf("%.2f\n",ma);
} return ;
}
HDU 4081 Qin Shi Huang's National Road System 次小生成树变种的更多相关文章
- 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 ...
- 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/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个城市的坐标 以及 每个城市里面有多少人 秦始皇想造路 让每个城市都连通 (直接或者 ...
随机推荐
- UIImageView 在切图规范的情况下不用设置frame
UIImageView本身是没有frame的,所以UIImageView不用设置frame,UIImageView的fram由它内部的图片决定,所以当要更改UIImageView的大小显示的时候,更改 ...
- 【贪心】 poj 1032 和为n的若干数最大乘积
给出n,把n分解为若干不相同数之和,使之乘积最大.贪心,Discuss里面的思路:把n分解为从2开始的连续整数,如果有多,则从高位开始依次加1.如26,我们得到2+3+4+5+6,此时还剩余6(26- ...
- apicloud教程2 (转载)
本帖最后由 中山赢友网络科技有限公司 于 2015-10-17 15:38 编辑 继<APICloud之小白图解教程系列(一):认识APICloud>之后的第二篇教程. 本篇教程有以下知识 ...
- 织梦DEDE文章列表前面自动加递增数字标签
实现的办法很简单,只须要在序号递增的处所加上这段代码就行 [field:global runphp=""yes"" name=autoindex][/field ...
- UVALive 3027 并查集
#include <cstdio> #include <queue> #include <cstring> #include <iostream> #i ...
- Element type "bean" must be followed by either attribute specifications, ">" or "/>".
在这里其他内容就省了,错在,<bean id="bpcsU1gblDAO"class="dao.jk.bpcs.impl.BpcsU1gblDaoImpl" ...
- unit正交相机Size的计算公式
如:相机的大小为800*480,要使相机适应800*480像素的图,则 Size = 相机高/2/像素单位 = 480/2/100 = 2.4
- apache.commoms.digester3 解析xml文件
Technorati 标签: java,xml,digester,xmlrule,FromXmlRulesModule 1 简介 java解析xml,就个人所知有3种方法DOM.SAX和Digeste ...
- springMVC拦截器简单配置
<!-- 拦截器 --> <mvc:interceptors> <mvc:interceptor> <!-- 拦截所 ...
- sphinx set several dates as filter
http://sphinxsearch.com/forum/view.html?id=3187 > I think I may have found a bug. Yep, it looks w ...