题意:
一幅“随机图”定义为有如下性质的图:
有一个入口和一个出口
有向图
对于入口 出度比入度大1
对于出口 入度比出度大1
对于其他点 入度等于出度
现给出一幅有向图 每条边有2个决策――留下、扔掉 分别花费a和b 问 如果用最少的费用改造出“随机图”
思路:
网络流不错的题目 如果做过“混合图欧拉回路”(后文把这个问题成为p)那个zoj的题的话 这道题会有启发
来回忆p的做法 先将无向边随意定向 再利用度来将点划分成二分图 利用无向边建边 利用度连接这些点与源汇 然后做maxflow 满流则有解
“随意定向”启发我们本题也可以对边进行一定的处理 因此我们可以先比较a和b 取其中小的状态 这样得到的一定是费用最小的决策 但不保证是“随机图” 那么此时我们只需要改变决策 在费用最小的情况下达到“随机图” 此时想到了费用流
“利用度构图”启发我们同样讨论 in>out in==out in
out 的点 我们与S连边 对于 in
虽然我们的图不是二分图 但是层次关系仍然明显
我们将m条输入的边按照a和b的大小关系 分别建边u->v 容量1 费用b-a 表示将边从留下状态改为扔掉状态 反之亦然
那么此时流量就表示通过更改边的策略 能将多少“度”平衡掉 也就是说 如果maxflow满流 则可以构成“随机图”
剩下的就是最小费用 很明显就是刚才建边的费用之和 最后费用+“随即定向”时的最小花费就是答案
PS:要尽量去理解网络流中“流”的实际意义 想办法构造图
代码:
#include
#include
#include
#include
#include
#include