POJ 2728
来源:互联网 发布:java讲师技术含量 编辑:程序博客网 时间:2024/05/18 08:40
【题目分析】
最优比率生成树。
【代码】
#include <cstdio>#include <cstring>#include <cmath>#include <iostream>#include <algorithm>using namespace std;const double eps=1e-4;double x[1001],y[1001],z[1001],dis[1001];double v[1001][1001],c[1001][1001];int n,tmp,in[1001];inline bool test(double mid){ double ans=0,minn; memset(in,0,sizeof in); dis[1]=0;in[1]=1; for (int i=2;i<=n;++i) dis[i]=c[1][i]-v[1][i]*mid; for (int i=1;i<n;++i) { minn=0x7f7f7f7f; for (int j=1;j<=n;++j) if (!in[j]&&dis[j]<minn) { minn=dis[j]; tmp=j; } in[tmp]=1; ans+=dis[tmp]; for (int j=1;j<=n;++j) dis[j]=min(dis[j],c[tmp][j]-v[tmp][j]*mid); } return ans<=eps;}int main(){ while (scanf("%d",&n)!=EOF&&n) { for (int i=1;i<=n;++i) scanf("%lf%lf%lf",&x[i],&y[i],&z[i]); for (int i=1;i<=n;++i) for (int j=1;j<=n;++j) { v[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); c[i][j]=sqrt((z[i]-z[j])*(z[i]-z[j])); } double l=0,r=100; while (l+eps<=r) { double mid=(l+r)/2; if (test(mid)) r=mid; else l=mid; } printf("%.3f\n",l); }}
0 0
- POJ 2728
- POJ-2728-Desert King
- poj 2728 Desert King
- POJ-2728-Desert King
- poj 2728 Desert King
- POJ 2728 Desert King
- POJ 2728 Desert King
- [POJ 2728]Desert King
- 【POJ 2728】Desert King
- POJ 2728 Desert King
- POJ 2728 Desert King
- POJ 2728 Desert King
- POJ 2728Desert King
- POJ 2728 Desert King
- POJ 2728Desert King
- poj 2728 二分图
- POJ 2728:Desert King
- POJ
- 第四周项目2-建设“单链表”算法库
- 生活随笔
- 前台页面通过JS调用Servlet访问到后台类
- 预处理
- 有关计数问题的DP 划分数
- POJ 2728
- libcurl的学习笔记和文档的翻译(有时间将会持续更新)
- Java虚拟机执行引擎多态的实现
- 单片机==共阴数码管(4)
- Python进阶强化训练之数据结构与算法进阶
- 独家专访成人VR工作室SugarInstant VR
- Quartz.NET教程_Lesson 8: SchedulerListeners
- android的Drawable详解
- 从程序员到项目经理,没有捷径可走