ABC351D

[ABC351D] Grid and Magnet

题意简述

给定一个 \(h\times w\) 的网格,有些网格中有磁铁。你可以向上下左右移动 \(1\) 格。

当这个格子上下左右有磁铁时你不能移动。

对于每个没有磁铁的单元格,将其自由度定义为从该单元格重复移动所能到达的单元格数。求网格中所有没有磁铁的单元格的最大自由度。(不一定一次性,只要有一种方案可达)。

称受磁铁影响的格子为禁地。(有去无回)

法1

分析

根据定义,能到达的单元格分为两类:

  1. 禁地。
  2. 非禁地。

平时做到的题目好像没有有去无回的,都是①双向连通,并查集就可以求最大连通块。

于是考虑先剔除禁地和磁铁格,可以将图分成好多个连通块,②连通块内的点彼此可达

再来考虑禁地:对于每个连通块,四周禁地也是可达的(因为去到就行,不用回来),计入答案。

做法

先用并查集,然后枚举每个连通块内的所有点的周边禁地总数(去重)。

更好的做法是枚举禁地,向四周连通块贡献 \(1\)。(去重)

可以考虑直接在维护并查集时维护 size(存在差异,我们需要特判在同一个集合,否则会导致 size 计算出错,调了 1h 多)。

https://atcoder.jp/contests/abc351/submissions/52948232

法2

分析

答案至少是 \(1\)

朴素做法:从每个点出发搜索。

因此可以从非禁地(禁地反正是 \(1\),搜一下也行)出发,搜索可达的点,计算答案(遇到禁地就不扩展,也要计入答案)。

性质:出发点必须是没有被遍历到过的点。(非禁地:①②,方案一样;禁地:动不了,反正 \(\text{ans}=1\)

由于连通块四周禁地的存在,搜索时可能搜索到之前访问过的点,但是这些点必定是禁地,不影响复杂度。

较法1实现更简单,但是考虑的细节更多。(其实差不多)

posted @ 2024-04-29 21:32  wscqwq  阅读(12)  评论(0编辑  收藏  举报