4081 Qin Shi Huang's National Road System
2013-10-24 22:30
363 查看
#include<cstdio> #include<cstring> #include<iostream> #include<cmath> #include<algorithm> using namespace std; #define maxn 1100 #define maxm 2200 #define INF 1100000 struct Point { double x,y,w; }p[maxn]; struct Edge { int s,e; double len; }e[maxn*maxn]; int n,m; double tolen; double maxLen[maxn][maxn]; int father[maxn]; int head[maxn],v[maxm],next[maxm],cnt; double w[maxm]; int vis[maxn]; void init() { memset(head,-1,sizeof(head)); memset(father,-1,sizeof(father)); memset(maxLen,0,sizeof(maxLen)); cnt=0; } double Dis(int a,int b) { return sqrt((p[a].x-p[b].x)*(p[a].x-p[b].x) +(p[a].y-p[b].y)*(p[a].y-p[b].y)); } void add(int a,int b,double c) { v[cnt]=b; w[cnt]=c; next[cnt]=head[a]; head[a]=cnt++; } bool cmp(Edge a,Edge b) { return a.len<b.len; } int getFather(int i) { if(father[i]==-1) return i; return father[i]=getFather(father[i]); } void kru() { init(); sort(e+1,e+1+m,cmp); tolen=0.0; int num=0; for(int i=1;i<=m;i++) { int a=getFather(e[i].s); int b=getFather(e[i].e); if(a!=b) { num++; father[a]=b; tolen+=e[i].len; add(e[i].s,e[i].e,e[i].len); add(e[i].e,e[i].s,e[i].len); } if(num==n-1) break; } } void dfs(int u,int x) { for(int i=head[x];~i;i=next[i]) if(!vis[v[i]]) { vis[v[i]]=1; maxLen[u][v[i]]=max(maxLen[u][x],Dis(x,v[i])); dfs(u,v[i]); } } void solve(int u) { memset(vis,0,sizeof(vis)); vis[u]=1; dfs(u,u); } int main() { int t; cin>>t; while(t--) { cin>>n; for(int i=1; i<=n; i++) scanf("%lf%lf%lf",&p[i].x,&p[i].y,&p[i].w); m=0; for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { m++; e[m].s=i; e[m].e=j; e[m].len=Dis(i,j); } } kru(); for(int i=1; i<=n; i++) solve(i); double pi=0.0; for(int i=1; i<=n; i++) { double tmp; for(int j=i+1; j<=n; j++) { tmp=p[i].w+p[j].w; pi=max(pi,tmp/(tolen-maxLen[i][j])); } } printf("%.2lf\n",pi); } return 0; }
相关文章推荐
- 生产者和消费者模式
- Vi编辑器入门
- 黑马程序员--数据库基础
- oracle 分区
- 队列和栈
- POJ 1269 Intersecting Lines 直线交
- 多重panel的边框效果
- java类库的阅读笔记_jdk1.7.0_40_java.io.Serializable
- Delphi stdCall意义
- Powershell 开启远程桌面
- Linux常用命令及vim的使用、vim常用插件(推荐)
- Log4Net整理
- xcode4.4+ APP 打包以及提交apple审核详细流程(新版本更新提交审核)
- 黑马程序员-关于三种继承方式
- 黑马程序员--异常与异常的处理
- 移动无线上网卡,PPP连接协议终止,是什么东东?
- 设计一个追踪类
- 黑马程序员--字符串String总结
- 滑动盒子/弹性盒子
- POJ 3304 Segments 线段交