「HGOI-1」Water

Luogu
IDLGP8485
Time2000ms
Memory256MB
DifficultyP6
并查集洛谷原创O2优化洛谷月赛
水桶可以描述为一个 $h\times w$ 的竖直平面,其中 `.` 表示空格,`#` 表示挡板,保证除顶面外所有边界均有 `#`。 $\text{uuku}$ 给水桶装水的方式很奇特:他希望在装水完成的瞬间水不流动。即对于任意一格存在水的位置,其左右和下方均有水或者挡板。并且如果一格水的上方是空格,则称之为水平面,如果上方是挡板或者水桶外部,则称之为上界面。水形成的四连通块内的所有水平面都要一样高且所有上界面都应该不高于水平面(该条件即为在真空环境且存在重力时水不流动)。 从装水完成后开始计时,每秒都会进行一次扩展。每次扩展所有水平面都会向上方的空格**扩展一层**,并填充**高度小于等于新扩展层的**所有可达的空格(可以理解为仍满足 $\text{uuku}$ 的上述要求),这一切可以看作是瞬间完成的。 神奇的水会一直扩展,直到**所有可达的空格**均被水填满后停止扩展,即不存在水平面。 现在 $\text{uuku}$ 想知道,对于所有符合他要求的装水方案,所有水停止扩展所需时间的**平均值**是多少。 ## Input 第一行两个整数 $h$,$w$,表示水桶的高度和宽度。 接下来 $h$ 行,每行 $w$ 个字符,其中 `.` 表示空格,`#` 表示挡板。 ## Output 一行一个整数,表示 $\text{uuku}$ 给水桶装水需要的时间的平均值,由于答案可能很大,所以你只需要给出对 $998244353$ 取模以后的结果。 [samples] ## Background $\text{uuku}$ 每天都给他的线段树浇水。但由于线段树是平面的,所以 $\text{uuku}$ 用一个二维的水桶给它浇水。 ## Note #### 样例 1 解释 装水无需时间。 共有 $9$ 种情况(`*` 表示水): $1$: ``` #...#...# #.#...#.# ######### ``` 需要 $0\text{s}$。 $2$: ``` #...#...# #*#...#.# ######### ``` 需要 $1\text{s}$。 $3$: ``` #...#...# #*#***#.# ######### ``` 需要 $1\text{s}$。 $4$: ``` #...#...# #*#***#*# ######### ``` 需要 $1\text{s}$。 $5$: ``` #...#...# #.#***#.# ######### ``` 需要 $1\text{s}$。 $6$: ``` #...#...# #.#***#*# ######### ``` 需要 $1\text{s}$。 $7$: ``` #...#...# #*#...#*# ######### ``` 需要 $1\text{s}$。 $8$: ``` #...#...# #.#...#*# ######### ``` 需要 $1\text{s}$。 $9$: ``` #***#***# #*#***#*# ######### ``` 需要 $0\text{s}$。 因此期望为 $\dfrac{7}{9}\equiv 110916040(\bmod 998244353)$。 #### 数据范围 本题采用**捆绑测试**,共有 $5$ 个 $\text{subtask}$,最终分数为所有 $\text{subtask}$ 分数之和。 $$ \def\arraystretch{1.5} \begin{array}{|c|c|c|}\hline \textbf{Task} & \textbf{Score} & h,w\le \cr\hline 1 & 10 & 10 \cr\hline 2 & 20 & 100 \cr\hline 3 & 20 & 500 \cr\hline 4 & 20 & 2000 \cr\hline 5 & 30 & 5000 \cr\hline \end{array} $$ 对于 $100\%$ 的数据,$1 \le h,w \le 5000$。
Samples
Input #1
3 9
#...#...#
#.#...#.#
#########
Output #1
110916040
Input #2
10 20
###...###....#######
##..#.####.##.######
##.##.####.#.#.#####
#.#..##..###.#.....#
#..##.#.#....###.#.#
####....#.##.#..##.#
##..###.#.#..#.##..#
###...#..##.##..##.#
#.#.#.##.##.##..####
####################
Output #2
966268884
Input #3
10 20
#####.######.####.##
####.#.#####.###.###
###.###.####.##.####
###.###.####.#.#####
##.#####.###..######
##.......###.#.#####
#..#####..##.##.####
#.#######.##.###.###
#.#######.##.####.##
####################
Output #3
581693010
API Response (JSON)
{
  "problem": {
    "name": "「HGOI-1」Water",
    "description": {
      "content": "水桶可以描述为一个 $h\\times w$ 的竖直平面,其中 `.` 表示空格,`#` 表示挡板,保证除顶面外所有边界均有 `#`。 $\\text{uuku}$ 给水桶装水的方式很奇特:他希望在装水完成的瞬间水不流动。即对于任意一格存在水的位置,其左右和下方均有水或者挡板。并且如果一格水的上方是空格,则称之为水平面,如果上方是挡板或者水桶外部,则称之为上界面。水形成的四连通块内的所有水平面都要一",
      "description_type": "Markdown"
    },
    "platform": "Luogu",
    "limit": {
      "time_limit": 2000,
      "memory_limit": 262144
    },
    "difficulty": {
      "LuoguStyle": "P6"
    },
    "is_remote": true,
    "is_sync": true,
    "sync_url": null,
    "sign": "LGP8485"
  },
  "statements": [
    {
      "statement_type": "Markdown",
      "content": "水桶可以描述为一个 $h\\times w$ 的竖直平面,其中 `.` 表示空格,`#` 表示挡板,保证除顶面外所有边界均有 `#`。\n\n$\\text{uuku}$ 给水桶装水的方式很奇特:他希望在装水完成的瞬间水不流动。即对于任意一格存在水的位置,其左右和下方均有水或者挡板。并且如果一格水的上方是空格,则称之为水平面,如果上方是挡板或者水桶外部,则称之为上界面。水形成的四连通块内的所有水平面都要一...",
      "is_translate": false,
      "language": "English"
    }
  ]
}
Full JSON Raw Segments