[ZJOI2010]贪吃的老鼠

P2570 [ZJOI2010]贪吃的老鼠 

在Ta的博客查看

显然二分,最大流判定

要满足两个条件:

(1) 在任一时刻,一只老鼠最多可以吃一块奶酪;

(2) 在任一时刻,一块奶酪最多被一只老鼠吃。

先按照奶酪的边界进行离散化, 变成num个块,就可以知道每个时间有哪些奶酪了

把每个老鼠拆成num个点,

初步:

每个老鼠的每个时间的奶酪连接O(len*speed)

首先每个老鼠每个时间段吃的是有限的,显然保证(1)

但是不能保证(2)

改进:

考虑让每一个奶酪在时间段只能

 证明不会咕了

(总感觉不能一定能满足存在一种方案使得总共时间不会超出)

 

卡精度啊,,,,,

inf设太大了

并且为了防止被inf卡,可以直接记录ret表示流出流量,直接返回ret即可

#include<bits/stdc++.h>
#define reg register int
#define il inline
#define fi first
#define se second
#define mk(a,b) make_pair(a,b)
#define numb (ch^'0')
#define pb push_back
#define solid const auto &
#define enter cout<<endl
#define pii pair<int,int>
#define double long double
using namespace std;
typedef long long ll;
template<class T>il void rd(T &x){char ch;x=0;bool fl=false;while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);for(x=numb;isdigit(ch=getchar());x=x*10+numb);(fl==true)&&(x=-x);
}
template<class T>il void output(T x){if(x/10)output(x/10);putchar(x%10+'0');}
template<class T>il void ot(T x){if(x<0) putchar('-'),x=-x;output(x);putchar(' ');}
template<class T>il void prt(T a[],int st,int nd){for(reg i=st;i<=nd;++i) ot(a[i]);putchar('\n');}namespace Miracle{
const int N=33;
const int P=33*33*2+44;
const double inf=1e9;
const double eps=1e-8;
int n,m;
struct node{int nxt,to;double w;
}e[2*(P*N+N+P)];
int hd[P],cnt=1;
int p[N],st[N],nd[N];
int sp[N];
double mem[2*N];
int num;
int sum;
void add(int x,int y,double z){e[++cnt].nxt=hd[x];e[cnt].to=y;e[cnt].w=z;hd[x]=cnt;e[++cnt].nxt=hd[y];e[cnt].to=x;e[cnt].w=0;hd[y]=cnt;
}
int d[P];
int s,t;
double dfs(int x,double flow){if(x==t) return flow;double res=flow;for(reg i=hd[x];i&&res>eps;i=e[i].nxt){int y=e[i].to;if(e[i].w>eps&&d[y]==d[x]+1){double k=dfs(y,min(res,e[i].w));if(!k) d[y]=0;res-=k;e[i].w-=k;e[i^1].w+=k;}}return flow-res;
}
int q[P],l,r;
bool bfs(){memset(d,0,sizeof d);l=1;r=0;q[++r]=s;d[s]=1;while(l<=r){int x=q[l++];for(reg i=hd[x];i;i=e[i].nxt){int y=e[i].to;if(e[i].w>eps&&!d[y]){d[y]=d[x]+1;q[++r]=y;if(y==t) return true;}}}return false;
}
int id(int x,int y){return m+(x-1)*num+y;
}
bool che(double mid){memset(hd,0,sizeof hd);cnt=1;num=0;for(reg i=1;i<=m;++i){mem[++num]=st[i];mem[++num]=nd[i]+mid;}sort(mem+1,mem+num+1);num=unique(mem+1,mem+num+1)-mem-1;--num;//warning!!!
s=0,t=id(n,num)+1;for(reg i=1;i<=m;++i){add(i,t,p[i]);}for(reg i=1;i<=n;++i){for(reg j=1;j<=num;++j){for(reg k=1;k<=m;++k){if(st[k]<=mem[j]&&mem[j+1]<=nd[k]+mid){add(id(i,j),k,(double)sp[i]*(mem[j+1]-mem[j]));}}add(s,id(i,j),(double)sp[i]*i*(mem[j+1]-mem[j]));}}double flow=0,ret=0;while(bfs()){while(1){flow=dfs(s,inf);if(flow<eps) break;ret+=flow;}}if(ret+eps>sum) return true;return false;
}
void clear(){sum=0;s=0;t=0;
}
bool cmp(int x,int y){return x>y;
}
int main(){int T;rd(T);while(T--){clear();rd(m);rd(n);    for(reg i=1;i<=m;++i){rd(p[i]);rd(st[i]);rd(nd[i]);sum+=p[i];}for(reg i=1;i<=n;++i){rd(sp[i]);}sort(sp+1,sp+n+1,cmp);sp[n+1]=0;for(reg i=1;i<=n;++i){sp[i]-=sp[i+1];}double L=0.0,R=1e7+3;for(reg i=1;i<=60;++i){double mid=(R+L)/2;if(che(mid)) R=mid;else L=mid;}printf("%.10Lf\n",L);}return 0;
}}
signed main(){Miracle::main();return 0;
}/*Author: *Miracle*
*/

 

转载于:https://www.cnblogs.com/Miracevin/p/10840899.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IP: 169.254.0.0/16 地址用途

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 一直困惑169.254.0.0/16是干嘛的&#xff0c;每次笔记本dhcp获取地址失败后&#xff0c;就会随机在这个B类地址段获取一个地址&#…

值得借鉴的30条好习惯

我有幸一直能生活在比较好的圈子中&#xff0c;我的优秀的同学、舍友&#xff0c;乃至我现在创业后遇到的优秀创业者&#xff0c;从他们身上看到和学到一些好的习惯。 我一直觉得&#xff0c;好的习惯&#xff0c;是成功和进步的重要一点。我随手总结一些给大家&#xff0c;零散…

【PKUSC2019】线弦图【计数】【树形DP】【分治FFT】

Description 定义线图为把无向图的边变成点&#xff0c;新图中点与点之间右边当且仅当它们对应的边在原图中有公共点&#xff0c;这样得到的图。 定义弦图为不存在一个长度大于3的纯环&#xff0c;纯环的定义是在环上任取两个不相邻的点&#xff0c;它们之间都没有边&#xff0…

注解 @PostConstruct 与 @PreDestroy 详解及实例

简介 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Java EE5 引入了PostConstruct和PreDestroy这两个作用于Servlet生命周期的注解&#xff0c;实现Bean初始化之前和销毁之前的自定义操…

别让6种不良心理偷走你的好人缘

众所周知&#xff0c;拥有正常、健康的交际圈对于人的身心健康都是很有帮助的。但是若想维系好自己的交际圈&#xff0c;也是很不容易的&#xff0c;甚至在不经意间产生的某些心理&#xff0c;就会直接给大家的人际交往带来影响。那么接下来&#xff0c;小编就先为大家归纳一下…

PHP 安装xdebug

xdebug官网: https://xdebug.org 安装步骤如下: 使用 phpinfo() 打印出PHP相关信息, 全选, 复制 打开 xdebug 网站: https://xdebug.org/wizard.php 在图中输入框中粘贴你复制的信息, 点击 Analyse my phpinfo() output 在结果中点击下载, 然后按照它提示的步骤进行操作即可…

apt-clone:备份已安装的软件包并在新的 Ubuntu 系统上恢复它们

当我们在基于 Ubuntu/Debian 的系统上使用 apt-clone&#xff0c;包安装会变得更加容易。如果你需要在少量系统上安装相同的软件包时&#xff0c;apt-clone 会适合你。 如果你想在每个系统上手动构建和安装必要的软件包&#xff0c;这是一个耗时的过程。它可以通过多种方式实现…

分布式消息中间件 : Rocketmq

简述 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 分布式消息中间件&#xff0c;主要是实现分布式系统中解耦、异步消息、流量销锋、日志处理等场景。生产中用的最多的消息队…

PV、UV、UIP、VV、CPC、CPM、RPM、CTR指的是什么?

PV(PageView)&#xff1a;网站浏览量&#xff0c;指页面的浏览次数&#xff0c;用以衡量网站用户访问的网页数量。用户没打开一个页面便记录1次PV&#xff0c;多次打开同一页面则浏览量累计&#xff1b;UV(UniqueVistor)&#xff1a;独立访客数&#xff0c;指1天内访问某站点的…

linux opencl(AMD) Example

最近对并行计算很感兴趣。不过搞MPI对我来说暂时没什么用&#xff0c;基于GPU的并行计算倒是挺实用。网上的资料都是CUDA的。实质上我对CUDA一点兴趣都没有。无论别人的架构多么先进&#xff0c;我这个只有AMD显卡的小孩都是旁观者而已。在这里记录一下一个opencl程序的编译过程…

php使用supervisor管理进程脚本

supervisor是用python开发的一个在linux系统下的进程管理工具&#xff0c;可以方便的监听&#xff0c;启动&#xff0c;停止一个或多个进程。当一个进程被意外杀死后&#xff0c;supervisor监听到后&#xff0c;会自动重新拉起进程。 一、supervisor的安装 1、通过easy_install…

重写规则和重载规则

重写规则&#xff1a; 发生在有继承关系的类之间&#xff08;同一类就是重载了&#xff09;相同的方法名&#xff0c;参数列表&#xff0c;返回类型可见性&#xff08;public,protected,private&#xff09;不能被缩小异常不能被放大规则与c中不一样静态类型不能被重写方法重载…

消息中间件:RocketMQ 介绍(特性、术语、原理、优缺点、消息顺序、消息重复)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 消息中间件的作用 1. 应用解耦 2. 异步处理 比如用户注册场景&#xff0c;注册主流程完成以后&#xff0c;需要调用邮件系统发送邮件…

C# JsonHelper类

记录一下&#xff0c;方便下次用。 public class JsonHelper{#region Json/// <summary>/// JavaScriptSerializer/// </summary>/// <typeparam name"T"></typeparam>/// <param name"obj"></param>/// <returns&…

[译】Redux入门教程(一)

前言 老外写技术文章真是叼&#xff0c;这是国外的一个程序员写的一个简单易懂,循序渐进的Redux教程&#xff0c;本着共享的精神&#xff0c;就翻译出来给大家一起看&#xff0c;文章最后有链接&#xff0c;不想看我翻译的直接去看原文吧。 下面是原教程的英文目录 这篇先更三分…

使用 Intellij Idea 打包 java 工程为可执行 jar 包

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 其实还有个简单多了方法&#xff0c;见&#xff1a; 超简单方法&#xff1a; Intellij Idea 把 java 工程打成可运行的 jar 步骤&#x…

QuickStart系列:docker部署之Gitlab本地代码仓库

gitlab是可以在本地搭建的使用git作为源代码管理的仓库。 运行环境&#xff1a; win10vmware14docker7docker 1. 使用命令拉取镜像&#xff08;非必须&#xff0c;耗时比较久&#xff0c;这里以ce为准&#xff0c;ce是社区版&#xff0c;ee是企业版&#xff09;&#xff1a; do…

超简单方法: Intellij Idea 把 java 工程打成可运行的 jar

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 找到 Intellij Idea 最下面的 Terminal 选项&#xff0c;并点击进入该界面。 2. 在光标位置输入命令&#xff1a;mvn clean 。清理…

LDAP-轻量级目录访问协议(统一认证)

概念 LDAP是轻量目录访问协议&#xff0c;英文全称是Lightweight Directory Access Protocol&#xff0c;一般都简称为LDAP。 参考资料 LDAP概念和原理介绍 我花了一个五一终于搞懂了OpenLDAP LDAP-Apache Directory Studio使用&#xff08;创建DC.OU及用户&#xff09; 转载于…

kafka集群搭建(消息)

1、Kafka使用背景在我们大量使用分布式数据库、分布式计算集群的时候&#xff0c;是否会遇到这样的一些问题&#xff1a;我们想分析下用户行为&#xff08;pageviews&#xff09;&#xff0c;以便我们设计出更好的广告位我想对用户的搜索关键词进行统计&#xff0c;分析出当前的…