有一张二分图,左边有 个点,右边有 个点, 条边。每个点可能有一种颜色 R
或者 B
,也可能没有,也就是 U
。现在要给一些边染色,把边染成 R
要花费 的代价,把边染成 B
要花费 的代价,要求对于每个颜色为 R
的点,与之相邻的边中 R
的边 严格多于 B
的边;对于每个颜色为 B
的点,与之相邻的边中 B
的边 严格多于 R
的边。求花费最小的方案,输出任意一种,无解输出 。其中 。
考虑网络流建图,对于每条边 ,在网络流图上建立两条边:,如果流表示将该边染成红色,,表示将改变染成黑色。
建立超源 和超汇 ,考虑左边红色点, 向该点连一条下界为 的边,表示强制流红大于流黑,对于左边黑色点,该点向 连一条下界为 的边,表示强制流黑大于流红,右边同理。
最后跑一遍费用流即可。