如果没有恰好为 kkk 的限制的话是个老鼠进洞的经典模型。

加上恰好为 kkk 的限制后考虑使用 wqs 二分,因为费用流每次增广出来的费用是单调不降的。即如果设 g(k)g(k)g(k) 表示总流量恰好为 kkk 的最小花费,那么必有 g(k)−g(k−1)≤g(k+1)−g(k)g(k)-g(k-1)\le g(k+1)-g(k)g(k)−g(k−1)≤g(k+1)−g(k),且 (k,g(k))(k,g(k))(k,g(k)) 这些点构成一个凸壳。

wqs 二分的大概思路是:首先要求在没有 kkk 的限制下原问题能够快速解决。然后对于一个斜率 ccc,发现我们能快速求出斜率为 ccc 的直线与凸壳相切在哪个点上,因为经过点 (k,g(k))(k,g(k))(k,g(k)) 的斜率为 ccc 的直线在 yyy 轴的截距恰好就是 g(k)−ckg(k)-ckg(k)−ck,代表的意义就是每多 111 的流量就要多花费 ccc 的额外代价,那么我们在这个条件下跑一次没有限制的原问题即可。然后由于这是个凸壳,所以斜率可以二分。

#include<bits/stdc++.h>#define N 500010
#define ll long long
#define pii pair<int,int>
#define mk(a,b) make_pair(a,b)using namespace std;inline int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^'0');ch=getchar();}return x*f;
}struct data
{int a;bool opt;data(){};data(int _a,bool _opt){a=_a,opt=_opt;}bool operator < (const data &b) const{if(a==b.a){if(opt==b.opt) return 0;return b.opt;}return a>b.a;}
};int n,k,a[N],b[N];priority_queue<data>q;int main()
{n=read(),k=read();for(int i=1;i<=n;i++) a[i]=read();for(int i=1;i<=n;i++) b[i]=read();int l=0,r=2e9,c=-1;ll inter;while(l<=r){int mid=(0ll+l+r)>>1ll;int nk=0;ll gk=0;while(!q.empty()) q.pop();for(int i=1;i<=n;i++){q.push(data(a[i]-mid,1));data minn=q.top();if(minn.a+b[i]<=0){q.pop();nk+=minn.opt;gk+=0ll+minn.a+b[i];q.push(data(-b[i],0));}}if(nk>=k){c=mid,inter=gk;r=mid-1;}else l=mid+1;}printf("%lld\n",inter+1ll*c*k);return 0;
}

【CF802O】April Fools‘ Problem (hard)(wqs二分,模拟费用流,老鼠进洞)相关推荐

  1. BZOJ 1920 Luogu P4217 [CTSC2010]产品销售 (模拟费用流、线段树)

    题目链接 (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=1920 (luogu) https://www.luogu.org/prob ...

  2. BZOJ 5326 [JSOI2017]博弈 (模拟费用流、线段树)

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=5326 题解 终于成为第8个A掉这题的人--orz tzw神仙早我6小时 本以为这东西常数 ...

  3. BZOJ 4849 [NEERC2016] Mole Tunnels (模拟费用流)

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4849 题解 其实也是模拟费用流,但是这道题和一般的题目不一样,这道题是在一个完全二叉树上 ...

  4. BZOJ 4849 [NEERC2016]Mole Tunnels (模拟费用流)

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4849 题解 其实也是模拟费用流,但是这道题和一般的题目不一样,这道题是在一个完全二叉树上 ...

  5. BZOJ 3836 Codeforces 280D k-Maximum Subsequence Sum (模拟费用流、线段树)

    题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=3836 (Codeforces) http://codeforces.com ...

  6. UOJ #455 [UER #8]雪灾与外卖 (贪心、模拟费用流)

    题目链接 http://uoj.ac/contest/47/problem/455 题解 模拟费用流,一个非常神奇的东西. 本题即为WC2019 laofu的讲课中的Problem 8,经典的老鼠进洞 ...

  7. P6122-[NEERC2016]Mole Tunnels【模拟费用流】

    正题 题目链接:https://www.luogu.com.cn/problem/P6122 题目大意 给出nnn个点的一棵满二叉树,每个点有容量cic_ici​,mmm次从pip_ipi​处加一只仓 ...

  8. [NOI2019] 序列(模拟费用流)

    原先自己想的建图: 正确建图: 但是 n 太大了,所以考虑模拟费用流: 注意: 在1中, 若选的两个位置相同,则为情况2,不用减 f: 若选的位置在另一序列中已被选,则为情况3或4,不用减 f: 若选 ...

  9. [UOJ455][UER #8]雪灾与外卖——堆+模拟费用流

    题目链接: [UOJ455]雪灾与外卖 题目描述:有$n$个送餐员(坐标为$x_{i}$)及$m$个餐厅(坐标为$y_{i}$,权值为$w_{i}$),每个送餐员需要前往一个餐厅,每个餐厅只能容纳$c ...

  10. BZOJ 4946: [Noi2017]蔬菜 模拟费用流

    title BZOJ 4946 LUOGU 3826 简化题意: 定义了一种蔬菜为:\(ai,si,ci,xi\),意思是蔬菜的价格为 \(a_i\),第一份卖出时价格为 \(a_i+s_i\),一共 ...

最新文章

  1. Javascript:必须知道的Javascript知识点之“字面量和对应类型”
  2. python npv 计算公式_机器学习各种相似性度量及Python实现
  3. 动态规划之91 decode ways
  4. ueditor 编辑器增加css样式_Web入侵之利用编辑器漏洞入侵
  5. ERStudio8.0 破解版 下载 download
  6. 播放器音视频同步及网络抖动解决方案
  7. MATLAB神经网络工具箱(代码简单实现)
  8. 【文献阅读】Pre-Training With Whole Word Masking for Chinese BERT
  9. jira是干什么_JIRA的使用介绍(一)- 概念篇
  10. Android 从系统媒体库中选择视频
  11. 快速实现抖音的分享登录(android)
  12. 求值:空间向量的法向量
  13. LabVIEW十六进制和字符类型转换
  14. 开车的26条教训!开车的人一定看看!
  15. Vue3.0 使用 ref 判断目标 node 区域之外的点击事件(实现下拉框、弹窗关闭功能)
  16. 晶振的负载电容和频偏的计算方法总结
  17. 多元统计分析基于r课后答案_何晓群版—多元统计分析课后练习答案.pdf
  18. oracle crs 4535,11gRAC报错CRS-4535,CRS-4000解决
  19. C、C++ 将退休,Rust 欲上位?
  20. 招远服务器维修,招远商铺停车场挡车器施工方案

热门文章

  1. AD7705模数转换芯片工作原理
  2. Excel.js导出图片和表格
  3. 2、树莓派声卡设置和alsactl命令的使用
  4. 区块链开发者平台-u deserved it
  5. #python “滑动窗口” 处理氨基酸序列
  6. FlexPaper pdf文档转换swf
  7. Google搜索引擎命令大全
  8. log4j2 的使用【超详细图文】
  9. Logitech Flow无法识别另一台电脑,显示“请启用其他计算机上的Logitech Flow”的问题
  10. CAD参数绘制直线(网页版)