题目列表

可按标题、OJ、标签和启发记录快速筛选题目解析。

共 3718 题
OJ题号标题标签难度最后更新解析
洛谷P1040
通过中序遍历区间与二叉树子树一一对应的性质,建立 O(n^3) 的区间 DP 模型求最大加分,并通过记录各区间最优根节点递归输出前序遍历。
动态规划区间 DP二叉树
普及+/提高-2026-10-26 14:14
洛谷P2986
先求以 1 为根时的子树牛数与总代价,再通过换根公式 dist[v]=dist[u]+(total-2*sub[v])*w 线性求出最优集会点。
树形DP换根DP树动态规划
普及+/提高-2026-10-26 14:14
洛谷P1273
将用户数作为背包容量维度,利用树形背包 DP 求解在净收益非负条件下的最大转播用户数。
树形 DP背包 DP动态规划
普及+/提高-2026-10-26 14:13
洛谷P3147
值域很小而位置很大, 于是把区间 DP 的维度反转: dp[i][v] 存从 i 合成 v 的最短结束位置, 答案取最大的可达 v.
动态规划区间DP状态设计
提高2026-10-26 13:12
洛谷P5661
用全局时间队列清理过期优惠票,再按票价分桶寻找最早可用且票价足够的地铁券。
模拟队列cspj
普及-2026-10-25 19:18
洛谷P5536
把「恰好 k 个点又要连通」翻译成每个点的第二长臂长:答案是第 k+1 大臂长加 1,用直径中点求向下高度或剥叶分层都能直接算出。
树树的直径贪心BFS
普及+/提高-2026-10-24 20:15
洛谷P4170
把一次涂色看成一段连续区间,用区间 DP 让左右端点相同的字符共用一笔涂色,转移枚举拆分点,时间 $O(n^3)$。
动态规划区间dp字符串
提高+/省选-2026-10-24 12:05
洛谷P2052
两次 DFS:先根化建父子关系,再后序求每棵子树大小,边费用 = 边权 × |2·子树大小 − n|。
树形 DP子树大小DFS
普及2026-10-24 11:00
洛谷P3205
把插入过程反过来看:已入队的人在理想队形中是连续区间 [l,r],设 dp[l][r][0/1] 记录最后插入者在左端还是右端,按区间长度递增向两侧扩张计数。
动态规划区间dp计数dp
普及+/提高-2026-10-24 10:23
洛谷P4342
把环按断边展开成链,用同时记录区间最大与最小值的双状态区间 DP 处理负数的乘法,最后枚举所有断边取最优并按编号升序输出。
动态规划区间dp环形处理
普及+/提高-2026-10-24 09:38
洛谷P1775
从指数级枚举合并顺序的暴力出发,利用相邻合并对应连续区间的性质,设区间 dp[l][r] 枚举最后一次合并的断点,用前缀和加速得到 O(n³) 区间 DP。
动态规划区间dp前缀和
普及2026-10-24 00:35
洛谷P7077
把函数调用关系看成 DAG,逆拓扑序求每个函数的整体乘法倍数,再正拓扑序从后往前传播加法的最终系数。
图论拓扑排序动态规划数学
提高+/省选-2026-10-24 00:10
洛谷P7516
将动态删点与可达性等价转换为中间点编号受限的双向最大瓶颈路径,利用倒序 Floyd 动态规划在 O(n^3 + m) 内求解所有子图答案。
动态规划Floyd图论连通性
省选/NOI-2026-10-24 00:09
洛谷P1352
树上最大权独立集模板题:通过树形 DP 记录当前节点选或不选两种状态,自底向上合并子树最优解。
树形DP动态规划树
普及2026-10-23 23:58
洛谷P1070
对角线前缀和 O(1) 查段收益,交换 max 后每条对角线单调队列滑动窗口,O(nm) 决策优化 DP。
dp单调队列决策优化
提高2026-10-23 23:35
洛谷P2515
通过 Tarjan 缩点将软件循环依赖转化为不可分割的超点,再连虚拟根构成树形结构,进行树上有依赖的背包 DP 求解。
scc树形dp背包dp
提高2026-10-23 23:35
洛谷P2016
通过树形 DP 求解树的最小顶点覆盖,根据结点放与不放两种状态在子树间转移。
树形 DP图论动态规划
普及2026-10-23 23:30
洛谷P2656
通过 Tarjan 缩点将强连通分量内的边转化为完全采摘的点权,跨分量的边化为单次通行的有向边,再在 DAG 上利用拓扑排序求最长路。
图论Tarjan强连通分量拓扑排序动态规划
普及+/提高-2026-10-23 23:27
洛谷P1613
通过倍增预处理图上任意两点间是否存在长度为 2^k 的路径,转化为边权为 1 的最短路问题并用 Floyd 求解。
图论倍增最短路Floyd
普及+/提高-2026-10-23 23:24
洛谷P4290
把展开过程倒过来看:区间能折成一个字母当且仅当存在规则 c→xy 与分裂点把区间切两半;按区间长度递推的区间 DP,复杂度 O(L^3)。
动态规划区间 DP字符串
普及+/提高-2026-10-23 23:19
洛谷P1063
先断环成链并复制数组,再设 dp[l][r] 表示一段珠子聚合后的最大能量,枚举最后一次合并的断点。
动态规划区间dp环形处理
普及+/提高-2026-10-23 23:18
洛谷P4316
在有向无环图上逆向定义到达终点的剩余期望长度,利用全期望公式与拓扑序通过记忆化搜索在 O(n+m) 内求解。
动态规划概率与期望记忆化搜索图论
普及+/提高-2026-10-23 23:15
洛谷P1880
把环复制成 2n 长数组,先教会链上的区间 DP(枚举最后一次合并的断点),再枚举所有长度为 n 的起点,同时维护最小与最大合并代价。
动态规划区间dp环形处理
普及+/提高-2026-10-23 23:14
洛谷P1220
把已关灯集合压成包含起点的连续区间 [l,r],用 f[l][r][0/1] 记录停在区间左/右端的最小耗电,区间 DP 一步扩展到相邻端点,O(n^2) 求解。
区间DP动态规划
普及+/提高-2026-10-23 23:09
洛谷P5025
两种解法并列:线段树优化建图 + Tarjan 缩点把区间连边压到 O(log n),在 DAG 上传播可达区间端点;以及不建图的 O(n) 双向扫描,靠「引爆集合是连续区间」和「右向射程在向左闭包时仍有效」直接求端点。
图论线段树tarjan强连通分量双指针
提高+/省选-2026-10-23 17:09
洛谷P3842
行只能单调向下,所以逐行决策;再证明走完一行后最优解必停在该行线段的端点,把每行状态压缩成左、右两个,得到 O(n) 线性 DP。
动态规划线性DP思维
普及2026-10-23 17:02
洛谷P2860
把「任意两点有两条边不相交路线」化归为「没有桥」,删桥缩成边双得到桥树,答案就是桥树叶子数的一半向上取整。
图论tarjan割边边双连通分量
提高2026-10-23 16:34
洛谷P3825
把每场游戏的两种可用赛车建模成 2-SAT 布尔变量,用「禁 A / 禁 B」两种情形覆盖 x 地图的三种取值,2^d 次 Tarjan 判定。
2-SAT图论强连通分量枚举
提高+/省选-2026-10-23 15:28
洛谷P4606
把删点后 S 是否分裂翻译成圆方树上的路径必经点,再用圆点前缀和与虚树环巡游 O(|S|log n) 回答每次询问
圆方树点双连通分量tarjanLCA虚树路径计数
省选/NOI-2026-10-23 14:24
洛谷P4630
圆方树 + 赋权 + 树上路径贡献计数:方点权=BCC大小,圆点-1,树DP统计每点被(s,f)路径经过次数
圆方树点双连通分量树形DP路径计数
提高+/省选-2026-10-23 13:26
洛谷P3469
封锁一个点后,真正新增损失来自它把图切成的多个连通块;用 Tarjan 求割点时顺手统计每个被切下来的子树大小,就能在线性时间算出每个点造成的访问损失。
图论tarjan割点
提高2026-10-23 13:13
洛谷P4447
把每个组看成一条连续链,按实力值递增处理;有多条链可接时接最短的,链比人多时冻结最长的,断档时整段冻结,答案取所有链长的最小值。
贪心堆思维递进python
普及+/提高-2026-10-23 07:23
洛谷P1262
买下一个间谍就能免费得到他整条下游,于是真正要选的是「从哪些人进入」;互相可达的人缩成强连通分量只买最便宜的一个,缩点后 DAG 里只有入度为 0 的分量无人能揭发、必须直接收买。
图论强连通分量tarjanscc缩点dagpython
普及+/提高-2026-10-22 21:52
洛谷P2700
正难则反:把「最小删边代价」翻成「最大保留边权和」,按边权降序并用并查集,两端块都含敌城时才必须删这条边。
并查集贪心最小生成树Kruskal树思维
普及+/提高-2026-10-22 12:30
洛谷P4180
Kruskal 求 MST 后枚举非树边换树边,倍增 LCA 同时维护路径最大与严格次大边权。
严格次小生成树最小生成树倍增LCA并查集Kruskalpython
提高+/省选-2026-10-21 20:30
洛谷P1396
求 s 到 t 路径上最大边权的最小值(瓶颈路),可用 Kruskal、瓶颈 Dijkstra 或二分答案求解。
瓶颈路最小生成树并查集Dijkstra二分答案python
普及2026-10-21 18:20
洛谷P1194
把直接买建成虚拟源点边,把优惠价建成礼物间边,转化为最小生成树。
图论最小生成树Prim建模
普及2026-10-21 14:20
洛谷P1967
多次询问无向图中点对的最大瓶颈路:Kruskal 建最大生成森林,倍增 LCA 上跳时维护路径最小边权,O(log n) 回答每个询问。
最大生成树KruskalLCA倍增瓶颈路图论并查集python
提高+/省选-2026-10-21 12:00
洛谷P1550
把打井建成虚拟水源点到田地的边、铺管建成田地之间的边,问题化为 n+1 点图上的最小生成树,Kruskal 求解。
图论最小生成树Kruskal并查集虚拟源点建模
普及2026-10-21 10:20
洛谷P3403
以最小步长为模建立余数图,Dijkstra 求每类余数最早可达楼层。
同余最短路Dijkstra数学python
提高2026-10-21 09:59
洛谷P3275
把下界约束建成 0/1 边,SCC 判严格环后在缩点 DAG 上求最长路。
差分约束强连通分量DAGpython
提高2026-10-21 08:10
洛谷P3623
两遍 Kruskal:第一遍先加水泥路求鹅卵石路下界 need 并标记被迫边,第二遍放回被迫边、补鹅卵石路到 k 条、水泥路填满,得恰好含 k 条免费路的生成树。
最小生成树并查集Kruskal图论构造
普及+/提高-2026-10-21 00:00
洛谷P2865
Dijkstra 同时维护每点严格不同的最短与次短距离。
次短路Dijkstra最短路python
普及+/提高-2026-10-20 19:50
洛谷P2047
Floyd 同时维护最短距离和路径数,再按经过节点的路径比例计算重要度。
Floyd最短路计数中心性python
提高2026-10-20 17:28
洛谷P1119
按时间增量加入 Floyd 中间点,在线回答当前已重建村庄间最短路。
Floyd离线询问增量算法python
普及+/提高-2026-10-20 16:07
洛谷P6464
Floyd 后枚举传送门端点,逐点对比较原路和两个传送方向。
Floyd枚举全源最短路python
普及+/提高-2026-10-20 15:32
洛谷P1993
把三类作物数量关系统一成差分约束边,全点入队跑 SPFA 判负环,有负环即矛盾。
差分约束负环SPFApython
普及+/提高-2026-10-20 14:35
洛谷P1875
对配方超边做 Dijkstra 式松弛,再按最小成本递增顺序统计最优方案数。
最短路Dijkstra计数python
提高2026-10-20 12:35
洛谷P1144
BFS 分层并在最短层边上累加方案数,支持重边。
BFS最短路计数前向星python
普及+/提高-2026-10-20 10:40
洛谷P5960
把 x_c-x_c'<=y 转成 c' 到 c 的边,初值取 0 全部入队跑 SPFA 做松弛;无负环即有可行解。
差分约束SPFA负环python
普及+/提高-2026-10-20 09:46
洛谷P4568
把免费次数作为分层状态,在 n(k+1) 个状态上运行 Dijkstra。
分层图Dijkstra状态扩展python
提高2026-10-18 23:05
洛谷P1037
对十个数字求变换传递闭包,再把每一位的可达数字数相乘。
传递闭包乘法原理位运算pythoncpp
普及-2026-10-18 19:47
RainboyOJ3004
A[i] 全为正数,前缀和严格递增,于是「sum[k] ≤ T」具有二分性:在线解法从位置 0 从大到小试跳 2^i 定位最后一个可行位置,离线解法把询问按 T 排序后双指针右移推进。
倍增前缀和二分双指针离线python
普及+/提高-2026-10-18 16:45
RainboyOJ1415
矩形加、点查询:把矩形拆成 4 个带符号的二维差分点,用二维树状数组(外层 x、内层 y)求二维前缀和,单次 O(log²)。
数据结构树状数组二维树状数组差分离散化python
提高+/省选-2026-10-17 23:20
洛谷P3371
用队列优化的 Bellman-Ford(SPFA)求非负权有向图单源最短路,只在距离被改小时重新入队。
SPFA最短路图论队列模板题
普及2026-10-17 15:33
洛谷P14363
以 map 精确分组差异核心、双 Trie DFS 激活和祖先链求和为主解,并对照 AC、二维扫描线与确定性线性做法。
字符串AC自动机字典树离线扫描线树状数组
省选/NOI-2026-10-16 20:04
洛谷P4779
用 heapq 实现带过期状态判断的 Dijkstra,求非负权有向图单源最短路。
Dijkstra最短路heapqpython
普及+/提高-2026-10-16T00:00:00.000Z
RainboyOJ1385
利用扩展域并查集维护朋友域与敌人域,实现敌人的敌人是朋友的传递合并,统计不同团伙代表元数量。
并查集种类并查集
普及+/提高-2026-10-13 22:34
RainboyOJ1389
带集合大小的并查集:M 合并时把小家族挂到大家族根下并把人数累加到新根,Q 输出 sz[find(a)],均摊近似线性。
并查集连通块等价类python
普及-2026-10-13 22:33
RainboyOJ1386
按编号前缀删点后最大连通块不超过 floor(n/2):删 1..k 等价于只保留后缀,倒序加点用并查集维护集团大小,首个超过 n/2 的集团所在轮次即最小 k,复杂度 O((n+m)log n)。
图论并查集连通块倒序加点python
普及+/提高-2026-10-13 22:33