| 记录编号 |
614851 |
评测结果 |
AAAAAAAAAA |
| 题目名称 |
3476.[POJ 2728]沙漠之王 |
最终得分 |
100 |
| 用户昵称 |
2_16鸡扒拌面 |
是否通过 |
通过 |
| 代码语言 |
C++ |
运行时间 |
1.017 s |
| 提交时间 |
2026-04-17 17:37:34 |
内存使用 |
10.98 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=1005;
const double eps=1e-6;
int n,x[N],y[N],z[N];
double c[N][N],l[N][N],d[N];
bool v[N];
bool chk(double m){
for(int i=1;i<=n;i++)d[i]=1e18,v[i]=0;
d[1]=0;
double s=0;
for(int i=1;i<=n;i++){
int u=-1;
for(int j=1;j<=n;j++)if(!v[j]&&(u==-1||d[j]<d[u]))u=j;
v[u]=1;s+=d[u];
for(int j=1;j<=n;j++)if(!v[j])d[j]=min(d[j],c[u][j]-m*l[u][j]);
}
return s>=0;
}
int main(){
freopen("desertking.in","r",stdin);
freopen("desertking.out","w",stdout);
while(scanf("%d",&n),n){
for(int i=1;i<=n;i++)scanf("%d%d%d",&x[i],&y[i],&z[i]);
for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++){
c[i][j]=c[j][i]=fabs(z[i]-z[j]);
l[i][j]=l[j][i]=hypot(x[i]-x[j],y[i]-y[j]);
}
double L=0,R=100;
while(R-L>eps){
double M=(L+R)/2;
if(chk(M))L=M;
else R=M;
}
printf("%.3f\n",L);
}
}