Solution -「ARC 125E」Snack
\(\mathcal{Description}\)
Link.
把 \(n\) 种零食分给 \(m\) 个人,第 \(i\) 种零食有 \(a_i\) 个;第 \(i\) 个人得到同种零食数量不超过 \(b_i\),总数量不超过 \(c_i\),求最多分出的零食数量。
\(n,m\le2\times10^5\)。
\(\mathcal{Solution}\)
很容易看出这是网络流模型:
- 源点 \(S\) 连向每种零食 \(i\),容量 \(a_i\);
- 零食 \(i\) 连向人 \(j\),容量 \(b_j\);
- 人 \(j\) 连向汇点 \(T\),容量 \(c_j\)。
答案即为 \(S\) 到 \(T\) 的最大流。
在这样的网络中,我们发现容量的种类数少,而边数很多,可以推出边的容量与这条边具体连接两端结点的相关性不强。这种时候,可以尝试手算最小割。
具体地,设零食集合 \(A\) 被割入 \(S\) 部,那么对于一个人 \(i\),他被割入 \(S\) 部的代价为 \(c_i\),被割入 \(T\) 部的代价是 \(|A|b_i\),我们应取两者较小值,而这果然与 \(A\) 集合具体构成不相关。所以,枚举 \(|A|\in[0,n]\),每个人一定在一段前缀中被割入 \(T\) 部,在其余情况被割入 \(S\) 部,利用单调性维护这一过程,做到复杂度 \(\mathcal O(n\log n+m\log m)\),两个瓶颈皆为排序。
\(\mathcal{Code}\)
/*~Rainybunny~*/
#include <bits/stdc++.h>
#define rep( i, l, r ) for ( int i = l, rep##i = r; i <= rep##i; ++i )
#define per( i, r, l ) for ( int i = r, per##i = l; i >= per##i; --i )
typedef long long LL;
inline void chkmin( LL& a, const LL b ) { b < a && ( a = b ); }
const int MAXN = 2e5;
int n, m, b[MAXN + 5], ord[MAXN + 5];
LL a[MAXN + 5], c[MAXN + 5];
int main() {
scanf( "%d %d", &n, &m );
rep ( i, 1, n ) scanf( "%lld", &a[i] );
rep ( i, 1, m ) scanf( "%d", &b[i] ), ord[i] = i;
rep ( i, 1, m ) scanf( "%lld", &c[i] );
std::sort( a + 1, a + n + 1,
[]( const LL u, const LL v ) { return u > v; } );
std::sort( ord + 1, ord + m + 1, []( const int u, const int v )
{ return 1ull * c[u] * b[v] < 1ull * c[v] * b[u]; } );
LL sa = 0, sb = 0, sc = 0, ans = 1ll << 60;
rep ( i, 1, n ) sa += a[i];
rep ( i, 1, m ) sb += b[i];
for ( int i = 0, j = 1; i <= n; ++i ) {
sa -= a[i];
for ( ; j <= m && 1ll * i * b[ord[j]] > c[ord[j]];
sb -= b[ord[j]], sc += c[ord[j++]] );
chkmin( ans, sa + i * sb + sc );
}
printf( "%lld\n", ans );
return 0;
}
Solution -「ARC 125E」Snack的更多相关文章
- Solution -「ARC 104E」Random LIS
\(\mathcal{Description}\) Link. 给定整数序列 \(\{a_n\}\),对于整数序列 \(\{b_n\}\),\(b_i\) 在 \([1,a_i]\) 中等概率 ...
- Solution -「ARC 101D」「AT4353」Robots and Exits
\(\mathcal{Description}\) Link. 有 \(n\) 个小球,坐标为 \(x_{1..n}\):还有 \(m\) 个洞,坐标为 \(y_{1..m}\),保证上述坐标 ...
- Solution -「ARC 110D」Binomial Coefficient is Fun
\(\mathcal{Description}\) Link. 给定非负整数序列 \(\{a_n\}\),设 \(\{b_n\}\) 是一个非负整数序列且 \(\sum_{i=1}^nb_i\ ...
- Solution -「ARC 124E」Pass to Next
\(\mathcal{Description}\) Link. 有 \(n\) 个人站成一个环,初始时第 \(i\) 个人手里有 \(a_i\) 个球.第 \(i\) 个人可以将自己手中任意数 ...
- Solution -「ARC 126E」Infinite Operations
\(\mathcal{Description}\) Link. 给定序列 \(\{a_n\}\),定义一次操作为: 选择 \(a_i<a_j\),以及一个 \(x\in\mathbb R ...
- Solution -「ARC 126F」Affine Sort
\(\mathcal{Description}\) Link. 给定 \(\{x_n\}\),令 \[f(k)=\left|\{(a,b,c)\mid a,b\in[0,c),c\in[1,k ...
- Solution -「ARC 125F」Tree Degree Subset Sum
\(\mathcal{Description}\) Link. 给定含有 \(n\) 个结点的树,求非负整数对 \((x,y)\) 的数量,满足存在 \(\exist S\subseteq V ...
- Solution -「ARC 058C」「AT 1975」Iroha and Haiku
\(\mathcal{Description}\) Link. 称一个正整数序列为"俳(pái)句",当且仅当序列中存在连续一段和为 \(x\),紧接着连续一段和为 \(y ...
- Solution -「ARC 101E」「AT 4352」Ribbons on Tree
\(\mathcal{Description}\) Link. 给定一棵 \(n\) 个点的树,其中 \(2|n\),你需要把这些点两两配对,并把每对点间的路径染色.求使得所有边被染色的方案数 ...
随机推荐
- react中prop-types的使用
什么是prop-types?prop代表父组件传递过来的值,types代表类型.简单来说就是用来校验父组件传递过来值的类型 import PropTypes from 'prop-types'; To ...
- 使用 arguments 对象
arguments 对象表示参数集合,它是一个伪类数组,拥有与数组相似的结构,可以通过数组下标的形式访问函数实参值,但是没有基础 Array 的原型方法. //函数没有定义形参,但是在函数体内通过 a ...
- JAVA-JDK1.7-ConCurrentHashMap-测试和验证
概述 上次记录了关于ConCurrentHashMap的原理以及源码,现在我对其进行有关功能的测试,下面就讲解一下我测试的内容和代码.这些测试主要针对JDK1.7版本. GET安全测试 上一篇写过ge ...
- mysql数据库优化1
目录 数据库结构的设计优化 1.数据库结构的设计 2.针对大型的数据量提前进行分库和分表 3.分库分表带来的问题 4.表结构设计注意的问题 查询优化 1.查询语句的注意事项 2.应尽量避免在 wher ...
- Solon Web 开发,十三、WebSocket
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Centos下安装Scala(2)
1.下载压缩包 命令:wget https://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.tgz 2.解压缩包 命令:tar -xzvf sc ...
- Python实现查询12306火车票信息
例子来源于马哥的公众号,看了几遍,有些地方存在些疑问,然后就自己查找些资料,重写的一下,但是对于获取到的信息,并不能有效的解析出来,而且对于中文字符处理,并不是很好,请大神指教下!谢过! 1.接口设置 ...
- 推荐一个github国内访问加速神器GitHub520
一.介绍 对 GitHub 说"爱"太难了:访问慢.图片加载不出来. 注: 本项目还处于测试阶段,仅在本机测试通过,如有问题欢迎提 issues 本项目无需安装任何程序,通过修改本 ...
- 【Azure 应用服务】Azure Mobile App (NodeJS) 的服务端部署在App Service for Windows中出现404 Not Found -- The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.
问题描述 使用NodeJS的后端应用,开发一个Mobile App的服务端,手机端通过REST API来访问获取后端数据.在本地编译好后,通过npm start启动项目,访问效果如下: 但是,当把项目 ...
- linux关闭swap
#(1)临时关闭swap分区, 重启失效; swapoff -a #(2)永久关闭swap分区 sed -ri 's/.*swap.*/#&/' /etc/fstab 也可以在sysctl.c ...