首页 > 其他分享 >AtCoder-abc351_d 题解

AtCoder-abc351_d 题解

时间:2024-04-28 20:34:49浏览次数:31  
标签:缩点 字符 格子 AtCoder 题解 abc351 dp

原题 翻译

题意简述

给定 \(H \times W\) 的网格图,如果一个字符是 #,则不能走到该字符上;如果是 .,则可以走到该字符上,但如果它周围 \(4\) 个格子中有 # 字符,则不能再继续行走了。

自由度是指从一个格子出发,能走到不同格子的数量(可以出发多次)。求出所有格子的最大自由度。

思路

考虑建图:每个格子的编号为 \((i-1) \times m+j\)。如果一个格子能走到另一个格子,则将这两个格子连边。

现在这是一个有向有环图。我们将该图进行缩点,得到一个有向无环图。新图中每个点的权值为该 SCC 中的结点个数。

设 \(dp_i\) 表示从第 \(i\) 个 SCC 出发能到达格子的数量。求 \(dp_i\) 时,如果使用普通的拓扑排序,则需要建反图,比较麻烦。我们可以直接采用记忆化搜索,代码好写且保证时间复杂度。

另外在缩点后新连边的时候,可能会连到重边,这对后面求 \(dp_i\) 是有影响的。因此我们可以用一个 set<pair<int,int>> 来去重。

最后将所有 \(dp_i\) 取最大值,即可得到答案。

代码

标签:缩点,字符,格子,AtCoder,题解,abc351,dp
From: https://www.cnblogs.com/lrxmg139/p/18164430

相关文章

  • AtCoder Beginner Contest 208 E
    E-DigitProducts点击查看代码map<int,int>f[20];voidsolve(){intn,k;cin>>n>>k;autos=to_string(n);intm=s.size();function<int(int,int,int,int)>dfs=[&](inti,intlimit,intis_num,intmul)->int{if(i......
  • 通配符匹配|dfs,hash|题解
    [CQOI2014]通配符匹配题目描述几乎所有操作系统的命令行界面(CLI)中都支持文件名的通配符匹配以方便用户。最常见的通配符有两个,一个是星号(*),可以匹配0个及以上的任意字符:另一个是问号(?),可以匹配恰好一个任意字符。现在需要你编写一个程序,对于给定的文件名列表和一个包含通配符的......
  • AtCoder Beginner Contest 351 E - Jump Distance Sum 切比雪夫距离与曼哈顿距离的转
    先说知识点。曼哈顿距离:横纵坐标距离差的绝对值的和,即|X1-X2|+|Y1-Y2|,离(0,0)点曼哈顿距离为1的点形成的是一个旋转45度后的正方形切比雪夫距离:横纵坐标距离差的绝对值的最大值,即max(|X1-X2|,|Y1-Y2|),离(0,0)点切比雪夫距离为1的点形成的是一个不旋转的正方形曼哈......
  • DozerCTF-PWN题解
    这次比赛一共放了4道pwn题,3道栈上的,比较菜,只会做栈1.pwn_fclosefrompwnimport*context(os='linux',arch='amd64',log_level='debug')io=remote('139.196.237.232',32985)#io=process("./pwn")libc=ELF("./libc.so.6&q......
  • abc351g 题解
    这场abcF、G质量堪忧。怎么能扔板子上来呢?板子:P4719【模板】"动态DP"&动态树分治Solution这种每次修改对后面询问有影响,又每次都要输出答案的,离线就基本做不了了,这时候就往动态算法想,其实做过几道ddp的题就看出来这是个板子。由于题目中的式子性质优良,我们很明显可以把......
  • atcoder集
    AtCoderBeginnerContest351A-Thebottomoftheninth(签到题) Code:#include<bits/stdc++.h>usingnamespacestd;#definedebug(x)cerr<<#x<<":"<<x<<'\n';intmain(){ios::sync_w......
  • CF1966D Missing Subsequence Sum 题解
    题意:给定\(n(n\le10^6)\)和\(k(k\len)\)。构造一个长度小于等于\(25\)的序列\(a\)满足:1.不存在一个子序列的和为\(k\)。2.对于\(1\lei\len,i\nek\),存在一个子序列的和为\(i\)。看到长度为\(25\),首先肯定会想到二进制。那么我们先构造出一个序列\([2^......
  • ABC351
    A.Thebottomoftheninth答案为\(\suma_i-\sumb_i+1\)B.SpottheDifference模拟C.Mergetheballs直接按题意模拟就是\(O(n)\)的,那么这题的瓶颈就在于两个球做合并,注意到\(2^a+2^a=2^{a+1}\),那么我们就可以不考虑底数\(2\),而直接处理指数即可代码实......
  • ABC351G题解
    考虑动态dp的套路,先树剖一下,令\(son(x)\)为点\(x\)的重儿子。\(g_x=\prod\limits_{u\inC(x)\landu\neqson(x)}f_u\)。于是有\(f_x=f_{son(x)}g_x+a_x\)。于是\(\begin{bmatrix}f_x&1\end{bmatrix}=\begin{bmatrix}f_{son(x)}&1\end{bmatrix}\begin{bmatrix}g_......
  • 【BFS】abc351D Grid and Magnet 题解
    传送门D-GridandMagnet题意:给定h行w列的图表,其中部分位置有磁铁,人物会在磁铁四周((x+1,y),(x-1,y),(x,y+1),(x,y-1))停止,某点的自由度定义为从该点出发最多可到的方块数目可以走重复路前置例题:求连通块大小洛谷P1141思路:由自由度的定义联想到连通块的大小,从而决定用BFS......