conda 与 uv conda创建新环境 conda create -n <env_name> python=3.8 conda activate <env_name> 删除环境 conda env list conda env remove -n <env_name> uvuv init uv venv .venv source .venv/bin/activate 2026-09-20 开发杂记 #常用命令
02_差分数组 差分数组模板diff = [0] * (n + 1) # 开 n+1,防止 r+1 越界 # 对区间 [l, r] 加 v diff[l] += v diff[r+1] -= v # 还原:对 diff 求前缀和 arr = [0] * n curr = 0 for i in range(n): curr += diff[i] arr[i] = curr 字典版(稀疏差分) 2026-09-20 算法学习 > 02_核心算法 #前缀和 #差分
05_并查集 并查集什么是并查集?并查集(Disjoint Set Union,DSU)数据结构,也称为联合-查找数据结构,允许你向图中添加边,并测试图中两个顶点是否相连。 由于实现非常简单,你可能更倾向于使用它来代替 DFS 计算连通分量。 核心优化1. 路径压缩 (Path Compression)在 find 操作中,将路径上的所有节点直接指向根节点,大大加快后续查询。 2. 按秩合并 (Union by 2026-09-19 算法学习 > 06_Graphs #并查集 #DSU #图 #数据结构
06_Cycle Detection in Directed Graph 有向图环检测 有向图中的环检测在有向图中检测是否存在环(Cycle)是一个经典问题。环是指从某个节点出发,沿着有向边最终能回到该节点的路径。 方法一:DFS + 三色标记算法思想使用三种颜色标记节点的状态: 白色 (0):未访问 灰色 (1):正在访问(在当前递归栈中) 黑色 (2):已访问完成(不在递归栈中) 如果在 DFS 过程中遇到灰色节点,说明找到了环。 为什么有效? 灰色节点表示当前路径上的节点 2026-05-07 算法学习 > 06_Graphs #DFS #图 #拓扑排序 #环检测
07_Python工具函数 Python 工具函数itertools.accumulate —— 前缀和 / 前缀最值签名:itertools.accumulate(iterable, func=operator.add, *, initial=None) 一遍扫描累积出「每一步的折叠结果」,默认就是前缀和: from itertools import accumulate from operator import mul 2026-09-19 算法学习 > 01_数据结构 #Python #itertools #前缀和
08_高级数据结构 高级数据结构树状数组 (Fenwick Tree)class Fenwick: """树状数组 (Fenwick Tree / Binary Indexed Tree)""" def __init__(self, n: int = 0): self.n = n self.a = [0] * 2026-09-19 算法学习 > 01_数据结构 #并查集 #树状数组 #RMQ #矩阵快速幂
最大子数组和(Kadane 算法) 最大子数组和(Kadane 算法)模板标准版(DP 转移,推荐)def kadane(nums): cur = nums[0] # 以 i 结尾的最大子数组和 best = nums[0] for x in nums[1:]: cur = max(x, cur + x) # 要么自己重开,要么接上前缀 best = max(best, 2026-09-20 算法学习 > 05_动态规划 #动态规划 #Kadane #子数组
01_Introduction to DP 动态规划简介 动态规划简介核心思想将大问题拆解为小问题,记录子问题的解,避免重复计算。 示例 - 青蛙 1 (Frog 1)题目描述https://atcoder.jp/contests/dp/tasks/dp_a 题目要求我们计算青蛙从石头 $1$ 跳到石头 $N$ ($N \le 10^5$) 的最小总成本,已知青蛙只能跳一或两的距离。任意两个石头 $i$ 和 $j$ 之间的旅行成本由 $|h_i - h 2026-04-30 算法学习 > 05_动态规划 #DP #动态规划 #算法
09_动态规划 动态规划(Dynamic Programming,简称 DP)是面试中出现频率最高的算法类型。很多同学觉得 DP 难,其实只要掌握了思考框架,绝大多数题目都能拆解出来。 什么是动态规划核心思想:把一个大问题拆成若干个重叠的子问题,先解决小的子问题,把结果存起来,再用这些结果推导出大问题的答案。 与贪心算法的区别 维度 动态规划 贪心 决策方式 考虑所有子问题,取全局最优 每一步只看 2026-09-19 算法学习 > 05_动态规划 #动态规划 #模板
Custom Comparators and Coordinate Compression 自定义比较器和坐标压缩 Custom Comparators and Coordinate Compression自定义比较器和坐标压缩本文介绍两种在竞赛编程中常用的技术:自定义排序和坐标压缩。 一、自定义排序排序不仅限于数字,还可以用于任意对象。 方法一:使用元组将对象与排序关键字打包成元组: edge_num = 4 edges = [] for _ in range(edge_num): a, b, wi 2026-04-30 算法学习 > 其他算法 #排序 #坐标压缩 #自定义比较器