费用流.
- 将每个数字 $a_i$ 拆成入点 $p_i$ 和出点 $q_i$,对于 $S\to p_i,q_i\to T$ 连费用为 $0$ ,容量为 $b_i$ 的边.
- 若 $a_i,a_j$ 之间可以配对,就对于 $p_i\to q_j,p_j\to q_i$ 连费用为 $-c_i\cdot c_j$ ,容量为 $inf$ 的边.
- 跑 $mcmf$ ,每次 $spfa$ 完之后判一下是否会使得费用 $>0$ ,若会,就加上限制下的最大流量,然后退出即可.
这样做每对的贡献都被算了 $2$ 次,所以最后答案要 $/2$ .
1 |
|