当前位置: 首页 > news >正文

[POJ2728] Desert King

link

题目大意

有$n$个点的完全图,每条边有价值$c$与权值$w$,求$\frac{\sum c}{\sum r}$最小

试题分析

一道分数规划,我们二分$k$值,判断当每条边边权为$c-k\times w$时的最小生成树是否大于$0$,然后就会$T$掉,需要卡常,好像说正解是牛顿迭代法。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<climits>
using namespace std;
inline int read(){
    int f=1,ans=0;char c=getchar();
    while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    while(c>='0'&&c<='9'){ans=ans*10+c-'0';c=getchar();}
    return f*ans;
}
const int N=1000001;const int M=1000001;
struct node{
    int u,v;
    double c,w;
}x[N];
struct Node{
    int u,v;double w;
}s[N];
double l,r,eps=1e-4;
int xx[N],yy[N],h[N],cnt,f[N],n;
bool cmp(Node x1,Node x2){return x1.w<x2.w;}
int find(int x){if(f[x]==x) return x;return f[x]=find(f[x]);}
double dis(int x1,int y1,int x2,int y2){return (double)sqrt((double)(x1-x2)*(x1-x2)*1.0+(double)(y1-y2)*(y1-y2)*1.0);}
bool check(double k){
    for(int i=1;i<=cnt;i++) s[i].u=x[i].u,s[i].v=x[i].v,s[i].w=x[i].c-k*x[i].w;
    for(int i=1;i<=n;i++) f[i]=i;
    sort(s+1,s+cnt+1,cmp);
    double ans=0;
    for(int i=1;i<=cnt;i++){
        int t1=find(s[i].u),t2=find(s[i].v);
        if(t1!=t2){
            ans+=s[i].w;
            f[t2]=t1;
        } 
    }return ans>=0;
}
double maxn=-INT_MAX;
signed main(){
//    freopen("3.in","r",stdin);
    while(1){
        n=read();
        maxn=-INT_MAX,cnt=0;
        if(!n) return 0;
    for(int i=1;i<=n;i++) xx[i]=read(),yy[i]=read(),h[i]=read();
    for(int i=1;i<=n;i++)
        for(int j=i+1;j<=n;j++) x[++cnt].u=i,x[cnt].v=j,x[cnt].w=dis(xx[i],yy[i],xx[j],yy[j]),x[cnt].c=abs(h[i]-h[j]);
    l=0,r=101;
    while(l<=r){
        double mid=(l+r)/2;
        if(check(mid)) maxn=max(maxn,mid),l=mid+eps;
        else r=mid-eps;
    }
    printf("%.3lf\n",maxn);
    }
    
}
View Code

 

转载于:https://www.cnblogs.com/si-rui-yang/p/10159537.html

相关文章:

  • JavaScript基本语法
  • Spark实践 -- 夜出顾客服务分析
  • python元类学习笔记
  • 570. Managers with at Least 5 Direct Reports
  • Drop和Truncate与Delete的区别
  • bzoj2595: [Wc2008]游览计划
  • C# 很少人知道的科技
  • asp.net——公共帮助类
  • 什么是二次开发
  • C++ 解析json串
  • 系统管理员需知的 16 个 iptables 使用技巧
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • 《HelloGitHub》第 33 期
  • grep-学习记录
  • 面试题30:包含 min 函数的栈
  • SegmentFault for Android 3.0 发布
  • (三)从jvm层面了解线程的启动和停止
  • [译]Python中的类属性与实例属性的区别
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【译】理解JavaScript:new 关键字
  • 77. Combinations
  • ES6简单总结(搭配简单的讲解和小案例)
  • ESLint简单操作
  • HTTP那些事
  • HTTP请求重发
  • js算法-归并排序(merge_sort)
  • js中的正则表达式入门
  • Node项目之评分系统(二)- 数据库设计
  • PHP CLI应用的调试原理
  • SpingCloudBus整合RabbitMQ
  • TypeScript迭代器
  • Vue2.x学习三:事件处理生命周期钩子
  • web标准化(下)
  • 从零开始在ubuntu上搭建node开发环境
  • 容器服务kubernetes弹性伸缩高级用法
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 小试R空间处理新库sf
  • 一些css基础学习笔记
  • 白色的风信子
  • 国内开源镜像站点
  • 说说我为什么看好Spring Cloud Alibaba
  • ​香农与信息论三大定律
  • #define 用法
  • #NOIP 2014# day.1 T2 联合权值
  • #pragma pack(1)
  • #微信小程序:微信小程序常见的配置传旨
  • (Matlab)使用竞争神经网络实现数据聚类
  • (ZT)薛涌:谈贫说富
  • (多级缓存)缓存同步
  • (五)MySQL的备份及恢复
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (正则)提取页面里的img标签
  • (转)重识new
  • .bat批处理(三):变量声明、设置、拼接、截取