摘要: 1.统计每个点入队次数,如果某个点入队n次说明有环(bellman-ford) 2.统计当前每个点的最短路中所包含的边数,如果某点最短路所包含的边数>=n,则有负环(常用) 有很多块怎么解决: 把所有点都放入队列,距离初始化为0 阅读全文
posted @ 2025-07-11 12:31 闫柏军 阅读(0) 评论(0) 推荐(0)
摘要: 解决问题 多源最短路 传递闭包 最小环 恰好经过k条边的最短路(可重复经过)(倍增) //bellman-ford 能求不超过k条边的最短路 d[k][i][j] 表示中间点编号不超过k的i -> j的最短路 实际过程中可省略k这一维 可以用bitset 先用dp思想划分集合成n类 1, 2, .. 阅读全文
posted @ 2025-07-05 12:21 闫柏军 阅读(1) 评论(0) 推荐(0)
摘要: #define _CRT_SECURE_NO_WARNINGS #define ls cur << 1 #define rs cur << 1 | 1 #include <bits/stdc++.h> using namespace std; typedef long long ll; typede 阅读全文
posted @ 2025-06-03 15:57 闫柏军 阅读(6) 评论(0) 推荐(0)
摘要: https://www.luogu.com.cn/problem/P3258 点差分 #define _CRT_SECURE_NO_WARNINGS #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef 阅读全文
posted @ 2025-05-31 15:36 闫柏军 阅读(3) 评论(0) 推荐(0)
摘要: 单调队列: O(n)求解所有长度为len的区间最值 单调栈: O(n)求解每个元素左(右)边第一个比自己大(小)的数 阅读全文
posted @ 2025-05-27 13:23 闫柏军 阅读(4) 评论(0) 推荐(0)
摘要: 用倍增 快速求解区间最值 (GCD LCM 区间与或) 先预处理以每个点为起点的log个区间的最值 具体来说 f[i][j] 表示 [i, i + 2 ^ j]区间的最值 显然有转移 f[i][j] = max(f[i][j - 1], f[i + (1<<(j-1))][j-1]) 像区间dp一样 阅读全文
posted @ 2025-05-22 09:38 闫柏军 阅读(2) 评论(0) 推荐(0)
摘要: 一.浮点数 /因为浮点数的精度计算太过复杂,像3.14这样的数存在浮 点型变量里存的可能是3.139999999,也有可能是3.140000001, 所以不能直接用“==”判断两个浮点数是否相等。在这种情况 下,就允许判断两个浮点数为相等时,两数之间存在微小的误差, 这个“微小的误差”要取一个较小的 阅读全文
posted @ 2025-05-08 11:25 闫柏军 阅读(6) 评论(0) 推荐(0)
摘要: 单调队列 滑动窗口 code #define _CRT_SECURE_NO_WARNINGS #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e6 + 100; int a[N], 阅读全文
posted @ 2025-05-03 16:32 闫柏军 阅读(7) 评论(0) 推荐(0)
摘要: int 4字节 1MB = 2e5 int 1.状态定义: 经验积累多做题 2.状态转移: 一般以最后一次不同为划分分类转移 3.转移顺序: 需要保证所要计算的状态需要的状态已经被算出 背包等优化另说 4.初始化: 根据定义初始化 线性动态规划 数字三角形模型 数字三角形 从上走到下,max or 阅读全文
posted @ 2025-04-30 17:45 闫柏军 阅读(4) 评论(0) 推荐(0)
摘要: 堆是一颗完全二叉树,支持高效插入一个数,查找最大(小)值。 小根堆:对于任意节点u,满足u是{u,u2(左儿子),u2+1(右儿子)}中的最小元素,如何维护呢? 利用push, up操作 void down(int x) { int t = x; if (x * 2 <= sz && h[x * 2 阅读全文
posted @ 2025-03-17 18:10 闫柏军 阅读(23) 评论(0) 推荐(0)