2025 #1 我依然怕先行者放弃了导航 奉献者悔恨起坚守过信条

T1. P4262 [Code+#3] 白金元首与莫斯科

n×m 的棋盘上有一些障碍格,对于每一个非障碍格,需要求出若该格为障碍格,用 1×2 的砖铺满棋盘的方案数。其中 1n,m17

看到这一种比较抽象的网格上的题目,可以考虑使用插头 dp 来解决。

对于一个 1×2 的方块,其实就是左插头连上右插头或者一个下插头拼一个上插头,那么可以考虑使用一个二进制来维护现在的轮廓线,然后暴力 Hash 维护即可。

对于求解每一格怎么样的问题,可以考虑正着反着各作一遍插头 dp,然后在把答案合并。

先考虑正着做,若当前非障碍格即没有左插头也没有上插头,就记录下对于当前格在当前轮廓线下的方案数总和。接着考虑倒着做,若当前格即没有右插头也没有下插头,就查一下正着做时的记录,然后把贡献扔进答案里。

T2. CF1491F

Lemma : 切换后一定走的是菊花图。

Proof : 为了删掉倒数第二条边,我们必须在最后一步走回头路。类似的,为了删掉倒数第四条边,我们必须在下一步走回头路。以此类推我们走到最后一定走的是一个菊花图。

这样子我们就可以枚举菊花中心点 u。接下来考虑如何构造答案。

删去 u 的若干条相邻的边后,要求只有 u 和另外一个点的度数为奇数或者所有点的度数并且除了孤点,图联通。

假如有和 u 不相邻的点的度数为奇数,则需要将所有与 u 相联的奇数度电之间的连边删除。然后就可以构造啦!

由于 n,m 比较小,可以直接暴力 O(n(n+m)) 做。

T3.CF1558E

强!

首先答案有单调性,这是显然的,所以考虑二分解决。接下来考虑如何判断一个 x 能否走遍整一张图。

不能立即走回头路这个限制很烦人,我们一定是要。考虑从点 u 开始,然后走到点 v,然后希望从 v 开始不走回头路走到 u,这样子的话这一步的决策就没有后效性了,接着我们就可以直接利用贪心扩展。考虑路径 up1p2piu,此时我们可以将这条路径上的所有点的贡献加上。

那么我们接下来就可以从原图上找到一个已经被扩展的点 u,然后向没有被扩展的点 v 扩展一条带有简单环的路径,但是复杂度不行。

问题就出在了可能从 u 开始走某条路径到 v 之后走不通了,但是走另一条路到 v 就能继续走下去。所以我们每一次看到 v 还是得继续走,不能跳过。

假设我们目前有 2 条路径均 upivupiv。那么一定有 pipi。有因为 b 永远大于 0,所以我们可以通过第一条路径过去,然后反着从第二条路径走回来,这样找到了一条具有简单环的路径,然后拓展即可。

一次拓展的复杂度为 O(m),然后我们保证了每一个点都至多会被拓展一次,所以一次 check 的答案就是 O(nm)

那么最终的复杂度就是 O(nmlogai)

T4.CF1381D

好题!

我们发现只需要一个三叉树就可以将一个路径反过来。当这个三叉树的三叉长度均 l,并且当前这条路径可以到达他,那么这一条路径就可以反过来。

假设掉头中心为 u,需要不断调整 st,使得 ust 三点共线。实际上就是 s 所可以到达的右端点和 t 可以到达的左端点不断靠近。所以每一棵子树只需要处理出最深深度,然后用双指针即可。

应为你只需要到达一个掉头中心,你就可以取到其余所有的,所以你只需要找到一个即可。如果找不到那就是无解。

T5.北京大学 2024 年《数据结构与算法A(实验班)》期末考试E

令一个点的左节点和右节点的权值分别为 li,ri,那么我们钦定 liri。那么假如 i,lpirpi1 那么该树一定可以被生成。

发现哈夫曼树有一个性质就是,就是哈夫曼树会使得 i=1n2depi×ai 最小的树,而这个值一定不会大于 2×ni=1nai。所以点的深度会是在 O(logn+logai) 这个级别,然而在这个级别直接暴力枚举的复杂度我们是可以接受的。

回来看我们遇到了什么问题。很明显修改一个点的点权会使得其到根路径上所有点的点权改变,由于层数不多,所以我们直接暴力维护每一个点就行了。

posted @   sqrtqwq  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
历史上的今天:
2024-01-19 神题
点击右上角即可分享
微信分享提示