洛谷
文章平均质量分 72
smart_stupid
@smart_stupid
展开
-
P1379 八数码难题 题解
这个题就是一个 BFS 的经典题目,将整个序列状态放到队列里,一一检索,如果达到答案就结束搜索。我们存放空位所在的位置,每一次取出时就不用寻找空位在哪里了。枚举将上下左右移到空位的情况,如果当前情况没有被搜索到就放到队列里,如果当前状态就是目标状态就停止搜索,退出。我们可以将整个序列当成一个数字存进一个 map 里去重,map 很快,查询只有log级别,所以可以在很优秀的时间复杂度内完成问题。这个题还可以用双向广搜,从起点和终点同时开始搜,时间复杂度更优,但是我不会。原创 2024-01-28 18:17:51 · 242 阅读 · 0 评论 -
P1131 [ZJOI2007] 时态同步 题解
这是一道树形 DP 的题,十分简单,既然要使到根节点的距离相等,我们不妨先处理一个子树,再一层一层往上处理,最终处理到根节点,这就是树形 DP。首先,我们创建一个dis数组,disi表示第i个节点到叶子节点的距离,那么对于它的所有子树而言,我们要找到一个距离最大的节点,让所有子树都和那个节点同步,再创建一个dp数组,dpi表示第i个子树保持同步的次数,dpi就是它的所有子树的和加上所有子树同步到距离最大节点的次数。同时,设自己的子树为v。原创 2024-01-28 14:44:55 · 1257 阅读 · 0 评论 -
P3627 [APIO2009] 抢掠计划 题解
题目说了,我们可以重复经过一些 ATM 机,但是里面的前只能取一次。原创 2024-01-30 09:51:42 · 272 阅读 · 1 评论 -
P1018 [NOIP2000 提高组] 乘积最大 题解
这个题我使用了记忆化搜索,记录当前搜到的点和分成的段数的乘积最大值,如果我们搜到这个点后发现这个点的记忆化数组比我们当前的乘积大就没必要再搜下去了,如果比我们的乘积小就更新记忆化数组为我们当前的乘积。然后处理高精度,这里我推荐将高精度写成结构体,重载高精运算符,这样写着要自然一些。建议压位,如果不压位可能会超时。什么是压位?就是将整个数当做一个10^k进制数,k最好为4。原创 2024-01-28 11:08:18 · 269 阅读 · 0 评论 -
P1262 间谍网络 题解
这就是一道强连通分量板题。原创 2024-01-30 11:23:40 · 426 阅读 · 1 评论 -
P1005 [NOIP2007 提高组] 矩阵取数游戏 题解
这个题是一道高精度加上区间动规的题,题不难,但是码量有亿点多。将整个矩阵分成多个数列来处理,因为两个数列之间的取数关系互不干扰。我们设dpij为矩阵还剩从i到jdpijmaxdpijdpi−1j2m−ji−1×ai−1dpij12m−ji−1×aj1然后从外部扩展到内部就可以了。这里我们无法得到剩下区间没有的情况,只能从dpkk的情况在转移到答案。原创 2024-01-28 11:24:20 · 1233 阅读 · 0 评论 -
P1966 [NOIP2013 提高组] 火柴排队 题解
由此可见,前面两项都是定值,就只有第三项是变化的,又因为让差小就可以让总体小,所以我们尽量让数列里面的对应元素变小。数组里面的下标,在这个号码上求一遍逆序对即可。数组里的标号要配对所交换的次数就是逆序对的数量。数组里面的每一个数的号码就是与之配对的数在。所以这个题也不难,就是要实现的东西有点多。,然后交换数列里面相邻两个元素,使得。数组里面的元素配对,就要将。数组里元素是第几大,将。原创 2024-01-28 19:24:03 · 779 阅读 · 0 评论 -
P6171 [USACO16FEB] Fenced In G 题解
我们可以把每一个小方格看做一个点,要拆除一个栅栏就相当于给相邻的点连上一条边,使得这两个点联通,耗费的权值就是这个栅栏的长度。那么要使权值最小,我们就要尽量拆除代价小的边,同时,如果有两个点已经联通,连接这两个点的边就不用拆除了。我们可以用并查集来判断两个点是否联通。我们先建立纵横两个方向的边,再把每一条边按边权从小到大排序,遍历每一条边,如果这一条边连接的两点不联通,就给这两个点合并到一起,把答案的权值加上这条边的权值。最后输出答案的权值即可。原创 2024-02-18 13:25:56 · 476 阅读 · 0 评论 -
P2441 角色属性树 题解
我们发现,如果两个数x和y满足gcdxy1,那么这两个数就有同一个属性。证明:设gcdxy为k,那么如果k是一个质数,那么xy就有一个为k的属性,否则,将k分解质因数,也可以得到一个可以同时被xy整除的质数。n≤2⋅105,但是有一句话给我们指明了方向:本题测试数据随机,可能是假题。所以随机数据造出来的树大概率不是这种树:如果真的有这种退化成链的树,那么出题人可以立马去买一张彩票。我们算一下这种树出现的概率:如果长度只有10000。原创 2024-02-24 16:22:58 · 1077 阅读 · 0 评论 -
P5380 [THUPC2019] 鸭棋 题解
这是我写出的第一道紫题。纪念一下。我们用数字代表棋子。对于这个数字的个位,让1代表car2代表horse3代表guard4代表elephant5代表captain6代表duck7代表soldier。对于这个数字的十位,让0代表蓝方,让1代表红方。我们先写好判断棋子移动是否合法的函数,由于有7种棋子,所以就有7写好这7个函数之后,我们判断输入的棋子是不是我们自己的,如果不是,就代表这个命令不合法。如果是,就判断棋子类型,把我们写的函数丢进去。如果合法,就执行移动步骤,然后就是判断将军。原创 2024-02-14 15:15:00 · 575 阅读 · 1 评论 -
P3141 [USACO16FEB] Fenced In P题解
如果此题数据要小一点,那么我们可以用克鲁斯卡尔算法通过,但是这个数据太大了,空间会爆炸,时间也会爆炸。我们发现,如果用 MST 做,那么很多边的边权都一样,我们可以整行整列地删除。此时答案是1。此时答案是3。此时答案是5。此时答案是9。我们把第三列的栅栏删除,由于之前删除的两行栅栏导致第三列栅栏少删除一个,不用删除。你可以继续造更大的数据发现规律:我们先把每一列,每一行的栅栏长度算出来,从小到达排序,然后用双指针算法,两个指针i和j。原创 2024-02-18 22:08:40 · 1109 阅读 · 0 评论 -
P6348 [PA2011] Journeys 题解
此题要用线段树优化建图写,这里顺便讲解一下线段树优化建图。如果我们要从一张图的一个节点向另外k个节点连边:那么如果我们要执行2⋅105次这样的操作,每一次都要连105条边,阁下又将如何应对?如果我们在线段树上连边:这样就只用连logN条边。如果我们要从一个区间向一个点连边呢?多建一棵树,要进行最短路操作就从另外一棵树开始(我们称之为出树,另外一棵为入树)。这样就成功地从34节点向1节点连了一条边。如果要区间向区间连边,就多建一个虚点,就可以了。原创 2024-03-24 16:55:14 · 697 阅读 · 0 评论