Description:


在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外。 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到平面距离不超过d的任何一个石柱上。石柱都不稳定,每次当蜥蜴跳跃时,所离开的石柱高度减1(如果仍然落在地图内部,则到达的石柱高度不变),如果该石柱原来高度为1,则蜥蜴离开后消失。以后其他蜥蜴不能落脚。任何时刻不能有两只蜥蜴在同一个石柱上。

Input:


输入第一行为三个整数r,c,d,即地图的规模与最大跳跃距离。
以下r行为石竹的初始状态,0表示没有石柱,1~3表示石柱的初始高度。
以下r行为蜥蜴位置,“L”表示蜥蜴,“.”表示没有蜥蜴。

Output:


输出仅一行,包含一个整数,即无法逃离的蜥蜴总数的最小值。

Sample Input:


Sample Output:


题解:


这道题有一个网络流建模的常用方法。
我们注意到每个柱子在一个蜥蜴离开后立即下降1,也就是说这个柱子最多有h个蜥蜴经过。
由于网络流是对于边有流量限制,所以我们可以用一种另外的方法建模。
我们把每一个柱子拆成两个点u、v,u向v连一条大小为h的边,所有原来对于这个点的出边连在v上,入边连在v上(容量为INF)那么就可以很好地限制每一个位置经过蜥蜴的个数。

若该位置有一个蜥蜴,则由s向该点拆开后的u连一条大小为1的边。
若该位置距离边界小于d,则由改点拆开后的v向t连一条大小为INF的边。

然后在跑一边最大流。
代码如下: