摘要: 定义 什么是强连通分量?直白地说就是在一个有向图中,有一块区域,每个点都可以互相抵达。这里用一张图来说明一下。 图中的 \(1, 2, 3\) 是一个强连通分量,因为他们可以互相抵达。 Tarjan 算法 如何求强连通分量,最有名且最常用的就是 Tarjan 算法。 先给出如下定义: \(dfn_u 阅读全文
posted @ 2023-10-14 22:40 Manipula 阅读(152) 评论(4) 推荐(0)
摘要: 分析 感觉没有蓝题难度 一道 bfs 题目,相较于大部分 bfs 题,它较为复杂,但分析一下还是很好水过的。 建立墙时,可以用三维数组,\(wall_{~i, ~j, ~pos}\) 表示 第 \(i\) 行第 \(j\) 列 \(pos\) 方向有墙。 观察发现,\(8 = 2^3,4 = 2^2 阅读全文
posted @ 2023-10-11 21:30 Manipula 阅读(71) 评论(0) 推荐(0)
摘要: 前置芝士 排列组合 分析 明显的贪心,第一问与此题思路相似,优先选择做时间少的,可以尽可能让后面的罚时尽量的小。 难点在第二问,第二问问的是有几种可能性,有个显然的结论:相同做题时间的题目,位置调换答案仍然相同。 那么可以用 桶+排列组合 来解决: 用桶储存这个做题时间的出现次数 \(b_i\),然 阅读全文
posted @ 2023-10-03 10:36 Manipula 阅读(43) 评论(0) 推荐(0)
摘要: 分析 树形 dp。 定义状态 \(dp_{~i,~0}\) 为在以 \(i\) 为根节点的子树中,不选第 \(i\) 个人的最大快乐值,\(dp_{~i,~1}\) 为在以 \(i\) 为根节点的子树中,选第 \(i\) 个人的最大快乐值。 寻找根节点,然后从根节点开始 dfs,当前节点 \(u\) 阅读全文
posted @ 2023-10-01 22:42 Manipula 阅读(20) 评论(0) 推荐(0)
摘要: 分析 排列组合题目,但是 dp 做法。 存储当前列的高度 \(h_{~i}\),这里反着存,更好转移。 定义状态 \(f_{~i,~k}\) 为在前 \(i\) 列放置 \(k\) 个车的方法数。初始状态 \(f_{~i,~0} = 1\)。 分析状态转移方程: 当前列不放置车时:方法数为 \(f_ 阅读全文
posted @ 2023-09-30 13:33 Manipula 阅读(24) 评论(0) 推荐(0)
摘要: 分析 一道显然的最短路,用 dijkstra 算法。 计算最短路的同时,保存最短路个数,如果与当前最短路相同,最短路个数相加,否则到这个节点的最短路个数为上一个节点的最短路个数。 Accepted Code #include <bits/stdc++.h> using namespace std; 阅读全文
posted @ 2023-09-29 14:41 Manipula 阅读(32) 评论(0) 推荐(0)
摘要: Luogu原题链接 爆搜的思路不难想到,就是将翻折的操作进行模拟,再将翻折后的数组进行 dfs 然后重复该操作。 但是处理翻折操作十分复杂,中间的细节很多。 首先纸条可以翻转,大部分人都看到了,所以在爆搜中加入了翻转的操作,但只需要在判定时反向的也判一次就行了,至于正确性你们可以自行思考。 纸条的翻 阅读全文
posted @ 2023-09-27 19:48 Manipula 阅读(29) 评论(0) 推荐(0)