hdu-4081 Qin Shi Huang's National Road System(最小生成树+bfs)
题目链接:
Qin Shi Huang's National Road System
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 32768/32768 K (Java/Others)

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.
/*4081 452MS 13060K 2555 B G++ 2014300227*/
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+;
typedef long long ll;
const ll mod=1e9+;
const double PI=acos(-1.0);
int n,p[],vis[];
int findset(int x)
{
if(x==p[x])return x;
return p[x]=findset(p[x]);
}
void same(int x,int y)
{
int fx=findset(x),fy=findset(y);
if(fx!=fy)p[fx]=p[fy];
}
struct node
{
double x,y;
int pop;
};
node point[];
struct Edge
{
int l,r,pop;
double len;
}edge[N];
int cmp(Edge a,Edge b)
{
return a.len<b.len;
}
queue<Edge>qu;
vector<int>ve[];
int bfs(int num1,int num2)//bfs找两棵子树里权值最大的点;
{
memset(vis,,sizeof(vis));
vis[num2]=;
queue<int>q;
q.push(num1);
int mmax=;
while(!q.empty())
{
int fr=q.front();
q.pop();
mmax=max(mmax,point[fr].pop);
int si=ve[fr].size();
for(int i=;i<si;i++)
{
if(!vis[ve[fr][i]])
{
vis[ve[fr][i]]=;
q.push(ve[fr][i]);
}
}
}
return mmax;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
int cnt=;
for(int i=;i<=n;i++)
{
ve[i].clear();
p[i]=i;
scanf("%lf%lf%d",&point[i].x,&point[i].y,&point[i].pop);
}
for(int i=;i<=n;i++)
{
for(int j=i+;j<=n;j++)
{
edge[cnt].l=i;
edge[cnt].r=j;
edge[cnt].pop=point[i].pop+point[j].pop;
edge[cnt++].len=sqrt((point[i].x-point[j].x)*(point[i].x-point[j].x)+(point[i].y-point[j].y)*(point[i].y-point[j].y));
}
}
sort(edge,edge+cnt,cmp);
double dis=;
for(int i=;i<cnt;i++)
{
if(findset(edge[i].l)!=findset(edge[i].r))
{
same(edge[i].l,edge[i].r);
dis+=edge[i].len;
qu.push(edge[i]);
ve[edge[i].l].push_back(edge[i].r);
ve[edge[i].r].push_back(edge[i].l);
}
}
//cout<<"@"<<endl;
double ans=;
while(!qu.empty())
{
// memset(vis,0,sizeof(vis));
int ls=qu.front().l,rs=qu.front().r;
int ans1=bfs(ls,rs);
int ans2=bfs(rs,ls);
ans=max(ans,(ans1+ans2)*1.0/(dis-qu.front().len));
qu.pop();
}
printf("%.2lf\n",ans);
}
return ;
}
hdu-4081 Qin Shi Huang's National Road System(最小生成树+bfs)的更多相关文章
- 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 最小生成树
分析:http://www.cnblogs.com/wally/archive/2013/02/04/2892194.html 这个题就是多一个限制,就是求包含每条边的最小生成树,这个求出原始最小生成 ...
- 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 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——————【次小生成树、prim】
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 树的基本性质 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 【次小生成树】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4081 题意 给出n个城市的坐标 以及 每个城市里面有多少人 秦始皇想造路 让每个城市都连通 (直接或者 ...
- hdu 4081 Qin Shi Huang's National Road System(次小生成树prim)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4081 题意:有n个城市,秦始皇要修用n-1条路把它们连起来,要求从任一点出发,都可以到达其它的任意点. ...
随机推荐
- 邁向IT專家成功之路的三十則鐵律 鐵律四:IT人快速成長之道-複製
相信您一定看到過現今有許多各行各業的成功人士,他們最初都是從複製別人的成功經驗開始的,就算是一位知名的歌手,有許多都是在未成名以前,先行模仿知名歌手的唱腔.舞蹈.服裝等等開始的,然後在慢慢經過自我努力 ...
- Zxing二维码精简(竖屏、拉伸处理、扫描框大小和扫描线移动)
本帖最后由 levil_ad 于 2013-12-30 13:55 编辑 最近没事做了下二维码扫描,用的是ZXing的开源代码,官方源码地址:http://code.google.com/p/zxin ...
- SilverLight:基础控件使用(3)-DataGrid控件
ylbtech-SilverLight-Basic-Control:基础控件使用(3)-DataGrid控件 DataGrid控件-后台绑定 自动生成表列 不自动生成表列 1.A,返回顶部Person ...
- 现代数字信号处理——AR模型
1. AR模型概念观 AR模型是一种线性预测,即已知N个数据,可由模型推出第N点前面或后面的数据(设推出P点),所以其本质类似于插值,其目的都是为了增加有效数据,只是AR模型是由N点递推, ...
- eclipse中文凝视字体太小解决方法
新安装的eclipse中文凝视字体太小.解决方法例如以下: 打开Elcipse-->点击菜单条上的"Windows"-->点击"Preferences&quo ...
- Qt跨平台的一个例程
我的同事penk在近期北京的Hackathon展示了一个在多平台的例程. 非常多开发人员对这个挺感兴趣的. 今天我就把这个资源介绍给大家. 这是同一个用Qt写的应用.能够同一时候在Ubuntu Des ...
- 解决chrome浏览器us-yahoo.com搜索劫持
一直用着greenchrome浏览器,结果有次之后,地址栏的默认搜索引擎用的bing,但是仍然会重定向到us-yahoo.com进行搜索,初起时以为是greenchrome插件作者的返利,类似2345 ...
- python(36)- 测试题
1.8<<2等于? 32 “<<”位运算 264 132 64 32 16 8 4 2 1 原始位置 0 0 0 0 0 1 0 0 0 想左位移2位 0 0 0 1 0 0 ...
- FastDFS的配置、部署与API使用解读(8)FastDFS多种文件上传接口详解(转)
1.StorageClient与StorageClient1的区别 相信使用happy_fish的FastDFS的童鞋们,一定都熟悉StorageClient了,或者你熟悉的是StorageClien ...
- Swift高阶函数介绍(闭包、Map、Filter、Reduce)
Swift语言有非常多函数式编程的特性.常见的map,reduce,filter都有,初看和python几乎相同,以下简介下 闭包介绍: 闭包是自包括的功能代码块,能够在代码中使用或者用来作为參数传值 ...