P2284【L1 SOLO 第九场 HN11 day1】贪吃蛇
问题描述
一些蛇覆盖了一个网格。每个格子要么是一个障碍物,要么是蛇的一部分。每条蛇占据了一条折线(拐角处只能水平和竖直连接),且至少占据两个格子。蛇与蛇之间不重叠,蛇也不会与自己重叠。每条蛇还必须满足以下两个条件中的一个:
- 两个端点所在的格子在网格的边界。
- 蛇构成一个环,即两个端点相邻(垂直或水平,不能斜着),至少要占据4个格子(否则没法形成环)。
给定一个网格,用r * c的字符矩阵描述:’#’代表障碍物,’.’代表空地。在满足前面所述的条件下覆盖所有空地,并使得端点在网格边界(即不构成环)的蛇尽量少。
例如,以下网格:
……
.#.##.
.#….
….#.
.##.#.
……
可以由下面三种方案覆盖。还有其它的方案,但是没有仅用一条不构成环的蛇就覆盖整个网格的方案。
给定一个网格的描述,输出最少需要多少条不构成环的蛇来覆盖这个网格。如果不存在能够覆盖网格的方案,输出-1。
输入格式
的空白字符,每行之后都有换行符。
输出格式
输出满足题目要求的那个整数。
样例输入
……
.#.##.
.#….
….#.
.##.#.
……
样例输出
2
一道很玄的题目。
首先染色,染成黑白两色,
然后从源点连到白色格子连一条上界为2,下界也为2的边
然后从黑色格子连到汇点连一条上界为2,下界也为2的边
然后从白色格子往相邻的格子连一条容量为1的边
然后从源点连到边界上的黑色格子,连一条容量为1,费用为1的边
然后从边界上的白色格子连到汇点,连一条容量为1,费用为1的边
求上图的最小费用最大流即可。答案就是费用/2
代码:
1 |
|