#CF1534F2. 落沙

    ID: 1287 传统题 2000ms 512MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>3000Codeforces强连通分量拓扑排序缩点

落沙

落沙

  • 时间限制:2 秒
  • 内存限制:512 MiB

题目背景

这是本题的困难版本。本版本中,给定的需求量 (a_i) 不超过第 (i) 列原有的沙块数量。

题目描述

有一个 (n) 行 (m) 列的竖直棋盘。每个格子为空,或放有一块沙子。第 (i) 列底部有一个计数器,并给定非负整数 (a_i)。

一次操作可以扰动任意一块沙子。被扰动的沙块会从当前位置一直落到该列底部的计数器中。下落过程中,它会扰动与自己上下左右相邻的其他沙块;新被扰动的沙块也会按相同规则下落并继续扰动其他沙块。

当每一列的计数器中都至少有 (a_i) 块沙子时,谜题完成。

求完成谜题所需的最少操作次数。数据保证谜题有解。

输入格式

第一行包含两个正整数 (n,m)。

接下来 (n) 行,每行包含一个长度为 (m) 的字符串。其中 . 表示空格子,# 表示一块沙子。

最后一行包含 (m) 个非负整数 (a_1,a_2,\ldots,a_m)。

输出格式

输出一个非负整数,表示最少操作次数。

样例输入 1

5 7
#....#.
.#.#...
#....#.
#....##
#.#....
4 1 1 1 0 3 1

样例输出 1

3

样例输入 2

3 3
#.#
#..
##.
3 1 1

样例输出 2

1

样例输入 3

7 5
.#..#
#....
..##.
..##.
..###
..#..
#.##.
0 0 2 4 2

样例输出 3

1

样例解释

样例 1 的一种最优方案是扰动第一行第 (1) 列、第一行第 (6) 列以及第二行第 (4) 列的沙块。

样例 1 示意图

样例 2 中,只需扰动第一行最右侧的沙块。

样例 2 示意图

样例 3 中,只需扰动第一行最右侧的沙块。

样例 3 示意图

数据范围

对所有数据:

  • (1\le n\cdot m\le 400000);
  • (0\le a_i\le n);
  • (a_i) 不超过第 (i) 列原有的沙块数量。
子任务编号 分值 特殊限制
1 20 (n\cdot m\le 20)
2 40 (n\cdot m\le 2000)
3 无特殊限制