Problem
【SCOI2012】奇怪的游戏
Description
最近喜欢上一个奇怪的游戏。
这个游戏在一个的棋盘上玩,每个格子有一个数。每次会选择两个相邻的格子,并使这两个数都加上。
现在想知道最少多少次能使棋盘上的数都变成同一个数,如果永远不能变成同一个数则输出。
Input
输入的第一行是一个整数,表示输入数据有轮游戏组成。
每轮游戏的第一行有两个整数和, 分别代表棋盘的行数和列数。
接下来有行,每行个数。
Output
对于每个游戏输出最少能使游戏结束的次数,如果永远不能变成同一个数则输出。
Sample Input
1 | 2 |
Sample Output
1 | 2 |
HINT
对于的数据,保证
对于的数据,保证,所有数为正整数且小于
标签:网络流
黑白染色
二分答案
Solution
黑白染色,两色个数为和,两色初始数字和为和。则有
当时,可以直接解出,这时网络流一下是否可能达到即可。
当时,每次操作都会使一定能在某一基础上将所有格子都,那么所有大于等于最小的值都可以达到,具有二分性。那么二分,网络流即可。
对于网络流,建图如下:
- 对于白格,连接
- 对于黑格,连接
- 对于每组相邻点,连接
再计算一个
若,则当前可行。
Code
1 |
|