Reading

CodeForces 1288F Red-Blue Graph


Fanyi Pu

有一张二分图,左边有 n1 个点,右边有 n2 个点,m 条边。每个点可能有一种颜色 R 或者 B,也可能没有,也就是 U。现在要给一些边染色,把边染成 R 要花费 r 的代价,把边染成 B 要花费 b 的代价,要求对于每个颜色为 R 的点,与之相邻的边中 R 的边严格多于 B 的边;对于每个颜色为 B 的点,与之相邻的边中 B 的边严格多于 R 的边。求花费最小的方案,输出任意一种,无解输出 −1。其中 1≤n1,n2,m,r,b≤200。

考虑网络流建图,对于每条边 ⟨u,v⟩,在网络流图上建立两条边:u→v,如果流表示将该边染成红色,v→u,表示将改变染成黑色。

建立超源 s 和超汇 t,考虑左边红色点,s 向该点连一条下界为 1 的边,表示强制流红大于流黑,对于左边黑色点,该点向 t 连一条下界为 1 的边,表示强制流黑大于流红,右边同理。

最后跑一遍费用流即可。

Cite this post

@misc{pu2020oiicpccodeforcescf1288f,
  author = {Pu, Fanyi},
  title  = {CodeForces 1288F Red-Blue Graph},
  year   = {2020},
  month  = {2},
  url    = {https://pufanyi.com/blog/oi-icpc/codeforces/cf1288f}
}