费用流占个坑BZOJ1458的脑洞//n\
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了费用流占个坑BZOJ1458的脑洞//n\相关的知识,希望对你有一定的参考价值。
【题目大意】
有一个M * N的棋盘,有的格子是障碍。现在你要选择一些格子来放置一些士兵,一个格子里最多可以放置一个士兵,障碍格里不能放置士兵。我们称这些士兵占领了整个棋盘当满足第i行至少放置了Li个士兵, 第j列至少放置了Cj个士兵。现在你的任务是要求使用最少个数的士兵来占领整个棋盘。
【思路】
还没有写完..开始做了才发现这是一道权限题没地方测…………先占个坑码一下,免得过会儿忘了。
先判断是否有解,如果把棋盘全部填满的话还是不能满足,则必定是无解的;否则必定是有解。由于问的是最少要多少个士兵,脑洞一下最少的话可能用费用流?于是乎在草稿纸上写写写..
假设没有障碍的话,可以列出这样的式子:
- a11+a12+...+a1n>=L1
- a21+a22+...+a2n>=L2
- ...
- am1+am2+..+amn>=Lm
- a11+a21+a31+..+am1>=C1
- ...
- a1n+a2n+a3n+..+amn>=Cn
共(m+n)个式子,假设Xi>0,Yi>0
上述式子可以转换为:
- a11+a12+...+a1n+X1=L1
- a21+a22+...+a2n+X2=L2
- ...
- am1+am2+..+amn+Xm=Lm
- -a11-a21-a31-..-am1-Y1=-C1
- ...
- -a1n-a2n-a3n+..-amn-Yn=-Cn
可以看出每一个都出现了一次正的和一次负的,如果有位置是障碍的时候,接下来我们建图的时候可以当作它不存在..?
添加一个源点S和一个汇点T,对于前m个式子,由S向第i个式子连一条容量为Li,费用为0的有向边;对于后n个式子,由第j个式子向T连一条容量为Ci,费用为0的有向边。
对于aij,可以保证它在前m个式子里的第i个式子出现一次,在后n个式子的第j个式子出现一次,则由i到j(代指j+m)连一条容量为1,费用为1的有向边;对于每一个X1...
咦哪里不对..也许还需要加加减减?
以上是关于费用流占个坑BZOJ1458的脑洞//n\的主要内容,如果未能解决你的问题,请参考以下文章