ABC351D

[ABC351D] Grid and Magnet

题意简述

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

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

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

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

法1

分析

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

  1. 禁地。
  2. 非禁地。

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

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

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

做法

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

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

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

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

法2

分析

答案至少是 1

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

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

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

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

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

本文作者:wscqwq

本文链接:https://www.cnblogs.com/wscqwq/p/18166695

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   wscqwq  阅读(30)  评论(0编辑  收藏  举报
历史上的今天:
2023-04-29 小木棍
2023-04-29 斜率优化
2023-04-29 特别行动队
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起