Solution * 2025 - 暑期集训 DAY 4

平均难度:7/10 平均AC率:33% 水题×0

数据截止至2025/7/19 10:00

A. 奇怪的魔法 提交人数:8/23 AC率:34% 难度:5/10

这个问题涉及到动态合并集合以及查询元素之间的距离,使用并查集(Disjoint Set Union, DSU)的数据结构来高效处理。我们需要手写标准的并查集,以支持维护每个节点到其根节点的距离,从而能够计算同一集合中两个节点之间的距离。

并查集算法讲义

对于查询两个节点是否在同一集合,若在同一集合,则计算它们到根节点的距离之差减一即为它们之间的距离;否则返回-1。

B. 不安分的魔法学院 7/17 41% 5/10

这个问题类似于经典的并查集问题,但需要处理更复杂的克制关系。

为了方便理解,我们将题目抽象为(可能会违反直觉):

这个世界上只有三种动物:狗、猫、老虎,其中,狗吃猫、猫吃老虎(别笑)、老虎吃狗。

在每次合并前,检查是否存在矛盾:

C. 最短路径的数量 8/27 29% 7/10

这个问题要求我们找到从城市1到城市N的最短路径的数量。由于图中可能存在多条最短路径,我们需要使用广度优先搜索(BFS)来计算最短路径的数量。

我们使用邻接表来表示图,然后使用 BFS 来遍历图,因为 BFS 天然适合寻找最短路径。在 BFS 过程中,我们需要:

当发现更短的路径时,更新距离和路径数量;当发现相同长度的路径时,累加路径数量。

D. 典型楼梯问题 13/24 54% 3/10

这个问题是一个经典的动态规划问题,类似于爬楼梯问题,但增加了不能踩某些坏台阶的限制。

状态表示 定义 dpi 为到达第 i 级台阶的方案数,如果第 x 级台阶是坏的,那么 dpx=0

初始状态 dp0=1(地面),dp1=1(如果第 1 级台阶不是坏的)

状态转移 dpi=dpi1+dpi2

注意数组越界问题。

E. 非递减彩色路径 4/27 14% 10/10

本蒟蒻暂时没有做出来,请移步至 root 大佬的题解……

image.png

 

©LY 2025/7/18 *

Edit by Typora(Markdown) Partial by Deepseek Thanks xqwl.netlify.app (Authors @gdy @root) & @root