CF457B Distributed Join

题目描述

Piegirl 被要求为分布式数据库系统实现两张表的连接操作,并尽量减少网络流量。 假设她需要连接两张表,$A$ 和 $B$。它们各自有若干行,并分布在数量不同的分区上。表 $A$ 分布在第一个集群中的 $m$ 个分区中,第 $i$ 个分区包含 $A$ 表的 $a_i$ 行。同样,包含 $B$ 表的第二个集群有 $n$ 个分区,第 $i$ 个分区包含 $B$ 表的 $b_i$ 行。 每次网络操作可以将任意一个分区中的一行复制到任意其他分区。在最终结果中,对于 $A$ 表的每一行与 $B$ 表的每一行,都需要存在某个分区包含这两行。请你计算完成上述目标所需的最小复制操作次数。

输入格式

第一行包含两个整数 $m$ 和 $n$($1 \leq m, n \leq 10^{5}$)。 第二行包含 $m$ 个用空格分隔的整数 $a_{i}$($1 \leq a_{i} \leq 10^{9}$),描述第一个集群中各分区 $A$ 表行数。 第三行包含 $n$ 个用空格分隔的整数 $b_{i}$($1 \leq b_{i} \leq 10^{9}$),描述第二个集群中各分区 $B$ 表行数。

输出格式

输出一个整数,表示实现目标所需的最小复制操作次数。

说明/提示

在第一个样例中,可以将所有行移动到第二个集群的第二个分区,这共需 $2+6+3=11$ 次操作。 在第二个样例中,Piegirl 可以把 $B$ 表的每一行分别复制到第一个集群的每个分区,需要 $2 \times 3 = 6$ 次操作。 由 ChatGPT 5 翻译