一类神奇的网络流问题

费用流的奇怪用途。

已知(离散)下凸函数 $f_1(x),f_2(x)\dots f_k(x) $

以及一些限制 $ [c_{i,1}] x_{i,1} + [c_{i,2}] x_{i,2} + [c_{i,3}] x_{i,3} \dots [c_{i,k}] x_{i,k} = a_i$

最小化 $\sum \left( f_i(\sum x_{j,i}) \right)$

做法:使用费用流, 建源点,向所有点 $a_i$ 连边 $\text{<ai , 0>}$ , 每个 $a_i$ 向其对于的函数 $f_x$ 连边 $\text{<inf , 0>}$ , 每个 $f_x $ 向汇点连边 , 具体连边是将 $f_k(x)$ 差分 , 连若干条边 $ \text{<1,fk(x) - fk(x-1)>}$ ,然后跑最小费用最大流,正确性显然。

(若 $f_k(x)$ 有定义域上界,仍然可以解决)

例:

P4249 石头剪刀布

题意:给出完全图,其中有些边已经定向,你需要给其它边定向,使得图中三元环的数量最大 。

不好考虑形成的三元环,考虑每个点破坏的三元环 , 若一个点在某个环中入度为0 或 2

那么就破坏了三元环,由于一个被破坏的三元环的度数必然是 $\{2,1,0\}$ , 对“带有度数为2的环最小化即可” 。

即最小化 $\sum \binom {deg(x)}{i}$

每个限制即每条为限制的边$(u,v)$ $d(u)+1 \ \ or \ \ d(v) +1$

$f(x) = x \times (x-1) / 2$ 很明显是凸的,直接用上述做法就可以了。

另一种通过思维理解的网络流的做法实现一样,只是需要理解 “把度数从 $x$ 成 $x+1$ 答案会增加 $x$ ” 。

不如直接求来的无脑

posted @ 2022-05-12 21:22  寂静的海底  阅读(11)  评论(0)    收藏  举报  来源