\(\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的更多相关文章

  1. Solution -「ARC 104E」Random LIS

    \(\mathcal{Description}\)   Link.   给定整数序列 \(\{a_n\}\),对于整数序列 \(\{b_n\}\),\(b_i\) 在 \([1,a_i]\) 中等概率 ...

  2. Solution -「ARC 101D」「AT4353」Robots and Exits

    \(\mathcal{Description}\)   Link.   有 \(n\) 个小球,坐标为 \(x_{1..n}\):还有 \(m\) 个洞,坐标为 \(y_{1..m}\),保证上述坐标 ...

  3. Solution -「ARC 110D」Binomial Coefficient is Fun

    \(\mathcal{Description}\)   Link.   给定非负整数序列 \(\{a_n\}\),设 \(\{b_n\}\) 是一个非负整数序列且 \(\sum_{i=1}^nb_i\ ...

  4. Solution -「ARC 124E」Pass to Next

    \(\mathcal{Description}\)   Link.   有 \(n\) 个人站成一个环,初始时第 \(i\) 个人手里有 \(a_i\) 个球.第 \(i\) 个人可以将自己手中任意数 ...

  5. Solution -「ARC 126E」Infinite Operations

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\),定义一次操作为: 选择 \(a_i<a_j\),以及一个 \(x\in\mathbb R ...

  6. 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 ...

  7. Solution -「ARC 125F」Tree Degree Subset Sum

    \(\mathcal{Description}\)   Link.   给定含有 \(n\) 个结点的树,求非负整数对 \((x,y)\) 的数量,满足存在 \(\exist S\subseteq V ...

  8. Solution -「ARC 058C」「AT 1975」Iroha and Haiku

    \(\mathcal{Description}\)   Link.   称一个正整数序列为"俳(pái)句",当且仅当序列中存在连续一段和为 \(x\),紧接着连续一段和为 \(y ...

  9. Solution -「ARC 101E」「AT 4352」Ribbons on Tree

    \(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个点的树,其中 \(2|n\),你需要把这些点两两配对,并把每对点间的路径染色.求使得所有边被染色的方案数 ...

随机推荐

  1. 【PowerShell】ASCII与Char之间的转换

    1 [char[]][int[]]$char=65..90 2 $char -join ',' 3 [int[]][char[]]$ascii=$char 4 $ascii -join ',' A,B ...

  2. Linux上天之路(四)之Linux界面介绍

    Linux界面 linux为使用者提供了图形界面和文本界面,但是很多操作依然需要文本界面的操作才能完成,很多人使用起来比较蹩脚,又因为linux平台的个人应用APP相对较少,使得大家的个人PC安装了l ...

  3. Hive的连接和运行模式

    原文链接: https://www.toutiao.com/i6771018203687551495/ Hive的连接 启动hadoop的时候将history也启动,如果出问题,可以方便我们后续定位 ...

  4. java如何对接企业微信

    前言 最近实现社群对接企业微信,对接的过程遇到一些点,在此记录. 企业微信介绍 企业微信具有和微信一样的体验,用于企业内部成员和外部客户的管理,可以由此构建出社群生态. 企业微信提供了丰富的api进行 ...

  5. dart系列之:手写Library,Library编写最佳实践

    目录 简介 使用part和part of src中的文件 package中的lib文件 总结 简介 Library是dart用来组织代码的一种非常有用的方式,通过定义不同的Library,可以将非常有 ...

  6. MySQL 中如何定位 DDL 被阻塞的问题

    经常碰到开发.测试童鞋会问,线下开发.测试环境,执行了一个DDL,发现很久都没有执行完,是不是被阻塞了?要怎么解决? 包括在群里,也经常会碰到类似问题:DDL 被阻塞了,如何找到阻塞它的 SQL ? ...

  7. 带你读AI论文丨RAID2020 Cyber Threat Intelligence Modeling GCN

    摘要:本文提出了基于异构信息网络(HIN, Heterogeneous Information Network)的网络威胁情报框架--HINTI,旨在建模异构IOCs之间的相互依赖关系,以量化其相关性 ...

  8. gin框架使用Air实时加载

    Air实时加载 本章我们要介绍一个神器--Air能够实时监听项目的代码文件,在代码发生变更之后自动重新编译并执行,大大提高gin框架项目的开发效率. 1.1.1. 为什么需要实时加载? 之前使用Pyt ...

  9. 集合框架-ArrayList集合存储自定义对象

    1 package cn.itcast.p3.arraylist.test; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; ...

  10. 使用Xamarin开发移动应用示例——数独游戏(二)创建游戏界面

    在本系列第一部分,我们创建了程序框架,现在我们创建游戏的界面,项目代码可以从Github下载:https://github.com/zhenl/ZL.Shudu .代码随项目进度更新. 首先在View ...