题面

N

N

N 种糖果,

M

M

M 个小孩子,第

i

i

i 种糖果有

A

i

A_i

Ai​ 个,第

i

i

i 个孩子不能有超过

B

i

B_i

Bi​ 个同种类型的糖果,第

i

i

i 个孩子的糖果总数不能超过

C

i

C_i

Ci​ 。

合理分配糖果,问能分配出去的最大糖果数。

N

,

M

2

e

5

N,M\leq 2e5

N,M≤2e5 。

题解

不难想到,这就是最大流啊!

可是我们完全没法建图,更是跑不过。

那,模拟最大流?

您可以试试,不过我们这道题的正解是用最大流最小割定理

最大流等于最小割,此题最大流不好求,我们就求最小割。

一共有三类边,一类是源点连向每种糖果的边,权值为

A

i

A_i

Ai​ ,第二类是糖果和孩子之间的连边,孩子的每条入边边权都是

B

i

B_i

Bi​ ,第三类是孩子连向汇点的边,边权为

C

i

C_i

Ci​ 。

我们割掉一些边使得源点到不了汇点,可以逐个考虑。首先,糖果之间的顺序不重要,我们先把糖果按

A

i

A_i

Ai​ 从小到大排个序,割掉的边一定是个前缀。我们枚举割掉多少边,对应就已经有多少种糖果和源点不连通了,剩下的糖果,设一共有

X

X

X 种,要保证割掉第二类或第三类边后不与汇点连通。由于我们知道每种糖果与每个孩子都是存在边的,因此剩下的就是对于每个小孩子,独立地选择是割掉自己连向汇点的边(

C

i

C_i

Ci​),还是割掉从源点连过来的边(

X

B

i

X\cdot B_i

X⋅Bi​),选两者的较小值。由于决策是关于

X

X

X 单向变化的(

X

X

X 小到一定程度就不割

C

i

C_i

Ci​ 了),我们可以预处理出每个孩子决策变化时的

X

X

X 值。

时间复杂度

O

(

n

log

n

)

O(n\log n)

O(nlogn) ,基排可以

O

(

n

)

O(n)

O(n) 。

CODE

#include<set>
#include<map>
#include<stack>
#include<cmath>
#include<ctime>
#include<queue>
#include<bitset>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define MAXN 200005
#define LL long long
#define DB double
#define ENDL putchar('\n')
#define lowbit(x) (-(x) & (x))
#define FI first
#define SE second
#define eps (1e-4)
#define BI bitset<MAXN>
LL read() {
LL f=1,x=0;char s = getchar();
while(s < '0' || s > '9') {if(s=='-')f = -f;s = getchar();}
while(s >= '0' && s <= '9') {x=x*10+(s-'0');s = getchar();}
return f*x;
}
void putpos(LL x) {
if(!x) return ;
putpos(x/10); putchar('0'+(x%10));
}
void putnum(LL x) {
if(!x) putchar('0');
else if(x < 0) putchar('-'),putpos(-x);
else putpos(x);
}
inline void AIput(LL x,char c) {
putnum(x); putchar(c);
}
int n,m,s,o,k;
LL a[MAXN],b[MAXN],c[MAXN];
vector<int> bu[MAXN];
int main() {
n = read();m = read();
for(int i = 1;i <= n;i ++) {
a[i] = read();
}
sort(a + 1,a + 1 + n);
LL sm = 0,sb = 0;
for(int i = 1;i <= m;i ++) b[i] = read();
for(int i = 1;i <= m;i ++) {
c[i] = read();
sm += c[i];
int le = (int)max(0ll,(LL)n - (c[i]/b[i]));
if(le <= 0) {
sm -= c[i];
sm += n*1ll*b[i];
sb += b[i];
}
else bu[le].push_back(i);
}
LL ans = sm;
for(int i = 1;i <= n;i ++) {
sm -= sb;
sm += a[i];
for(int j = 0;j < (int)bu[i].size();j ++) {
int y = bu[i][j];
sm -= c[y]; sm += (n-i) *1ll* b[y];
sb += b[y];
}
ans = min(ans,sm);
}
printf("%lld\n",ans);
return 0;
}

ARC125E - Snack (网络流)的更多相关文章

  1. plain framework 1 网络流 缓存数据详解

    网络流是什么?为什么网络流中需要存在缓存数据?为什么PF中要采用缓存网络数据的机制?带着这几个疑问,让我们好好详细的了解一下在网络数据交互中我们容易忽视以及薄弱的一块.该部分为PF现有的网络流模型,但 ...

  2. 网络流模板 NetworkFlow

    身边的小伙伴们都在愉快地刷网络流,我也来写一发模板好了. Network Flow - Maximum Flow Time Limit : 1 sec, Memory Limit : 65536 KB ...

  3. COGS732. [网络流24题] 试题库

    «问题描述:假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性.现要从题库中抽取m 道题组成试卷.并要求试卷包含指定类型的试题.试设计一个满足要求的组卷算法.«编程任务: ...

  4. ACM/ICPC 之 有流量上下界的网络流-Dinic(可做模板)(POJ2396)

    //有流量上下界的网络流 //Time:47Ms Memory:1788K #include<iostream> #include<cstring> #include<c ...

  5. BZOJ 3144 [Hnoi2013]切糕 ——网络流

    [题目分析] 网络流好题! 从割的方面来考虑问题往往会得到简化. 当割掉i,j,k时,必定附近的要割在k-D到k+D上. 所以只需要建两条inf的边来强制,如果割不掉强制范围内的时候,原来的边一定会换 ...

  6. bzoj3572又TM是网络流

    = =我承认我写网络流写疯了 = =我承认前面几篇博文都是扯淡,我写的是垃圾dinic(根本不叫dinic) = =我承认这道题我调了半天 = =我承认我这道题一开始是T的,后来换上真正的dinic才 ...

  7. hdu3549还是网络流

    最后一次训练模板(比较熟练了) 接下来训练网络流的建图 #include <cstdio> #define INF 2147483647 int n,m,ans,x,y,z,M,h,t,T ...

  8. 二分图&网络流&最小割等问题的总结

    二分图基础: 最大匹配:匈牙利算法 最小点覆盖=最大匹配 最小边覆盖=总节点数-最大匹配 最大独立集=点数-最大匹配 网络流: 技巧: 1.拆点为边,即一个点有限制,可将其转化为边 BZOJ1066, ...

  9. COGS743. [网络流24题] 最长k可重区间集

    743. [网络流24题] 最长k可重区间集 ★★★   输入文件:interv.in   输出文件:interv.out   简单对比时间限制:1 s   内存限制:128 MB «问题描述: «编 ...

随机推荐

  1. 开发工具-在线生成GUID

    更新记录 2022年6月11日 记录开始. https://www.toolbaba.cn/d/dev_guid http://tool.pfan.cn/guidgen https://www.iam ...

  2. 如何正确理解古典概率中的条件概率 《考研概率论学习之我见》 -by zobol

    "B事件发生的条件下,A事件发生的概率"? "在A集合内有多少B的样本点"? "在B约束条件下,A发生的概率变化为?" "B事件中 ...

  3. 一文详解JackSon配置信息

    背景 1.1 问题 Spring Boot 在处理对象的序列化和反序列化时,默认使用框架自带的JackSon配置.使用框架默认的,通常会面临如下问题: Date返回日期格式(建议不使用Date,但老项 ...

  4. 全新升级的AOP框架Dora.Interception[6]: 实现任意的拦截器注册方式

    Dora.Interception提供了两种拦截器注册方式,一种是利用标注在目标类型.属性和方法上的InterceptorAttribute特性,另一种采用基于目标方法或者属性的调用表达式.通过提供的 ...

  5. python采集A站m3u8视频格式视频

    基本开发环境 (https://jq.qq.com/?_wv=1027&k=NofUEYzs) Python 3.6 Pycharm 相关模块的使用 (https://jq.qq.com/?_ ...

  6. 再测云原生数据库性能:PolarDB依旧最强,TDSQL-C、GaussDB变化不大

    1.摘要 近期,腾讯云数据库在文章「腾讯云TDSQL-C重磅升级,性能全面领跑云原生数据库市场」中提到,某些场景下性能有非常大的提升,且超过国内某橙色云厂商.恰好,在5月份,我们对各个厂商的云原生数据 ...

  7. React技巧之中断map循环

    正文从这开始~ 总览 在React中,中断map()循环: 在数组上调用slice()方法,来得到数组的一部分. 在部分数组上调用map()方法. 遍历部分数组. export default fun ...

  8. Metasploit(msf)利用ms17_010(永恒之蓝)出现Encoding::UndefinedConversionError问题

    Metasploit利用ms17_010(永恒之蓝) 利用流程 先确保目标靶机和kali处于同一网段,可以互相Ping通 目标靶机防火墙关闭,开启了445端口 输入search ms17_010 搜索 ...

  9. RT-Thread 组件 FinSH 使用时遇到的问题

    一.FinSH 的移植与使用问题 FinSH组件输入无反应的问题 现象:当打开 finsh 组件后,控制台会打相应的信息,如下图说是: \ | / - RT - Thread Operating Sy ...

  10. JDK9对集合添加的优化of方法和Debug追踪

    JDK9对集合添加的优化(of方法) JDK9的新特性: 1.List接口,Set接口,Map接口:里边增加了一个静态的方法of,可以给集合一次性添加多个元素 2.static List of (E- ...