摘要: lca需要查询两个点的最近公共祖先,使用倍增预处理时间复杂度为O(nlogn),查询为O(logn) 点击查看代码 vector<int> dep; //记录树的深度 vector<vector<int>> up; //记录倍增下第i个数的第第2^j级个祖先 vector<vector<int>> 阅读全文
posted @ 2025-08-13 21:11 洛鸿 阅读(8) 评论(0) 推荐(0)
摘要: 并查集 并查集有两个操作: 查询:判断两个元素是否为一个连通分量 合并:将两个连通分量合并为一个 并查集用来求连通分量十分方便,通过路径压缩与按秩合并优化,均摊时间复杂度接近O(1),可处理数据范围为1e6,求连通分量时可以无脑用并查集。 实现方式: 首先需要两个数组,分别表示当前点连接那个点,当前 阅读全文
posted @ 2025-05-26 21:56 洛鸿 阅读(24) 评论(0) 推荐(0)
摘要: 01背包 使用01背包能得到限定条件下的最优价值。 01背包的第一要点是一般有两个状态量,一是背包容量,二是价值。二者都是根据题目需要定义出来的。相应的,要装入“背包”的“物体”具有重量和价值。 dp[i][j],w[i],v[i] (dp[i][j]为在第i个物体下背包容量为j的最大价值,w[i] 阅读全文
posted @ 2025-05-22 01:33 洛鸿 阅读(15) 评论(0) 推荐(0)
摘要: 动态规划问题 什么是动态规划? 动态规划通过将复杂问题分解为子问题,通过动态规划方程计算并保存多阶段最优解,逐步递推到最终答案 动态规划能解决的问题是什么? 得到多阶段最优解,然后得到最终所需要的结果,就像一种暴力枚举,但是只枚举了最优解,其他解都不考虑。 再来可分为一些不同的题型: DAG(背包) 阅读全文
posted @ 2025-05-17 02:02 洛鸿 阅读(21) 评论(0) 推荐(0)