Description

有一个nm列的黑白棋盘,你每次可以交换两个相邻格子(相邻是指有公共边或公共顶点)中的棋子,最终达到目标状态。要求第i行第j列的格子只能参与mi,j次交换。

Input

第一行包含两个整数nm(1<=n, m<=20)。以下n行为初始状态,每行为一个包含m个字符的01串,其中0表示黑色棋子,1表示白色棋子。以下n行为目标状态,格式同初始状态。以下n行每行为一个包含m个0~9数字的字符串,表示每个格子参与交换的次数上限。
 

Output

输出仅一行,为最小交换总次数。如果无解,输出-1。

Sample Input

3 3
110
000
001
000
110
100
222
222
222

Sample Output

4
看到题 觉得和tjoi2013循环格非常像 那么就费用流咯 直接上来拆两个点乱写 wa飞  只有40  然后开始了膜题解之路 从中午一直看到现在菜死 才明白大概是哪里出了问题 另外..注意下 这题是八连通..
那么题解写到:我其实应该是拆点变成三个点  然后怎么搞首先1->2为限制最多换入的流量 2->3为最多换出的流量假设这个点原来是黑 然后后来变成了白点 这个限制说明我应该是对换入有一个限制 对换出也有一个限制 如果该点一开始是黑的后来变白了 说明他需要有至少1的流量把他换出才可 那么最后验证答案是否是-1的时候只需要验证我是否将所有不在位置上的点全部换出了  对于换到正确位置的关键就在于我这个流量最后从我需要的点流出去了 所以当原图只是黑点的时候 1->2 use[i]>>1 2->3  use[i]+1>>1 反之只需要改一改这个我的+1的位置即可 使得我这个点可以有流量流出 如果这个点初始状态和最终的状态一直相同 那么 首先我不能有一个交换次数是奇数次 这样我这个位置的数就不是原来的了 即 交换奇数次一定无法换回原来的状态
然后所有八连通的点都从3->1 如果这时候流量为1  那么说明这个被交换了一次

 

分类: 费用流

elijahqi

辣鸡蒟蒻一枚qwq 欢迎加qq qwq 2922945330

发表评论