#CF1985H2. Maximize the Largest Component (Hard Version)

    ID: 6908 传统题 1000ms 256MiB 尝试: 2 已通过: 1 难度: 10 上传者: 标签>数据结构深度优先搜索动态规划并查集模拟CodeforcesCodeforces Round 952(Div4)Div4H2CF1985H22200

Maximize the Largest Component (Hard Version)

题目描述

简单版本和困难版本实际上是不同的问题,因此请完整仔细地阅读两个问题的陈述。两个版本之间的唯一区别是操作。 Alex有一个由 n n 行和 m m 列组成的网格,由“.”和“#”字符组成。如果从该组中的任何单元格开始,通过仅移动到该组中共享一个共同边的另一个单元格,就可以到达该组中的任何其他单元格,则一组“#”单元格形成一个连通分量。连通分量的尺寸是该组中的单元格数量。 在一次操作中,Alex选择任意行r r 1rn 1 \le r \le n )和任意列c c 1cm 1 \le c \le m ),然后将行r r 和列c c 中的每个单元格设置为“#”。帮助Alex找到他在最多执行一次操作后,可以实现的“#”个单元格的最大连通分量的最大可能大小。

输入格式

输入的第一行包含一个整数 t t 1t104 1 \leq t \leq 10^4 )——测试用例的数量。 每个测试用例的第一行包含两个整数nnmm1nm1061 \le n \cdot m \le 10^6)——网格的行数和列数。 接下来的 nn 行每行包含 mm 个字符。每个字符要么是 '.'或 保证所有测试用例中的 nm n \cdot m 的总和不超过 106 10^6

输出格式

对于每个测试用例,输出一个整数——Alex可以实现的“#”单元的连通分量的最大可能大小。

样例

6
1 1
.
4 2
..
#.
#.
.#
3 5
.#.#.
..#..
.#.#.
5 5
#...#
....#
#...#
.....
...##
6 6
.#..#.
#..#..
.#...#
#.#.#.
.#.##.
###..#
6 8
..#....#
.####.#.
###.#..#
.##.#.##
.#.##.##
#..##.#.
1
7
11
16
22
36

样例说明

在第四个测试用例中,Alex将第4行和第2列的所有单元格设置为“#”是最优的。这样做将导致“#”的最大连通分量大小为16。 在第五个测试用例中,Alex将第2行和第4列的所有单元格设置为“#”是最优的。这样做将导致“#”的最大连通分量大小为22。

来源

Codeforces 1985H2,英文题名 Maximize the Largest Component (Hard Version)。