首先,我们发现以卡车的路线为边,仓库为点,构成了一张图。
然后我们又看到需要花最小代价使公司和零售商不连通。
那么我们很容易得到此题的模型:
以公司为源点,零售商为汇点,求出图中的最小割大小、最小割边数。
第一问,直接上著名的定理:
最大流 = 最小割 \text{最大流}=\text{最小割} 最大流=最小割
任何学过网络流的人都应该知道吧
于是直接上 D i n i c Dinic Dinic秒掉第一问。
然而我们发现第二问有些棘手:似乎没有快速求最小割边集的算法?
别急,我们依然从那个著名的定理入手。
最大流 = 最小割 \text{最大流}=\text{最小割} 最大流=最小割
显而易见的是,当最小割中所有边权均为 1 1 1时,最小割的大小等于最小割的边数。
但此题边权并不是 1 1 1,所以感性理解一下,要想办法把 1 1 1在不影响第一问答案的情况下附加到边上。
而附加信息其实有套路:
当我们使用 p b _ d s pb\_ds pb_ds中的平衡树时,为了实现重复元素的功能,我们将数据存在高位,而低位存一个时间戳。
于是新技能 g e t get get:将原数据 x x x乘一个常数