[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.pswp.cn/news/448845.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448845.shtml
英文地址,請注明出處:http://en.pswp.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;分析出當前的…