Problem24803--狼和羊的故事【浙江2009T2P2】

24803: 狼和羊的故事【浙江2009T2P2】

[Creator : ]
Time Limit : 1.000 sec  Memory Limit : 256 MB

Description

狼和羊的故事(ws.pas/.c/.cpp,256M, 1s)

 

“狼爱上羊啊爱的疯狂,谁让他们真爱了一场;狼爱上羊啊并不荒唐,他们说有爱就有方向......”

Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干!

Orez的羊狼圈可以看作一个n*m个矩阵格子,这个矩阵的边缘已经装上了篱笆。可是Drake很快发现狼再怎么也是狼,它们总是对羊垂涎三尺,那首歌只不过是一个动人的传说而已。所以Orez决定在羊狼圈中再加入一些篱笆,还是要将羊狼分开来养。

通过仔细观察,Orez发现狼和羊都有属于自己领地,若狼和羊们不能呆在自己的领地,那它们就会变得非常暴躁,不利于他们的成长。

Orez想要添加篱笆的尽可能的短。当然这个篱笆首先得保证不能改变狼羊的所属领地,再就是篱笆必须修筑完整,也就是说必须修建在单位格子的边界上并且不能只修建一部分。

 

输入数据

输入数据存放在文本文件ws.in中。

文件的第一行包含两个整数n和m。接下来n行每行m个整数,1表示该格子属于狼的领地,2表示属于羊的领地,0表示该格子不是任何一只动物的领地。

 

输出数据

输出数据存放在文本文件ws.out中。

文件中仅包含一个整数ans,代表篱笆的最短长度。

 

样例输入

2 2

2 2

1 1

 

样例输出

2

 

数据范围

10%的数据  n,m3

30%的数据   nm20

100%的数据  nm100

HINT

将每个格子看做一个点,相邻的格子之间连一条边,那么问题就转化为去掉最少的边使得两个点集不连通,这可以用最小割解决。将每条边拆成两条有向边,源向其中一个点集连边,另一个点集向汇连边,作最大流即可。

Source/Category