入门与解题方法
先找状态、单调性与可复用的局部规律。
浏览入门与解题方法 ↓手算建立直觉,证明解释边界,再用代码和独立验证检查结论。
先找状态、单调性与可复用的局部规律。
浏览入门与解题方法 ↓从路径代价到连通分量,再辨认有向依赖。
子树、换根与祖先关系,是同一结构的不同视角。
保存恰好足够的信息,减少重复计算。
从状态与转移走向计数、前缀和与数位限制。
从失配后保留的信息,走向字符前缀、二进制高位与逐层决策。
浏览字符串、前缀与 Trie ↓显示全部 39 篇文章
没有匹配的文章。试试更短的关键词,或点击“重置”查看全部内容。
证明必经边恰为分隔端点的桥,删桥后压缩连通块,用两次 BFS 求桥树直径,附 low 手算、非递归 C++17 和删边搜索独立对拍。
按边权分组,先收缩严格更轻边的连通块,再在保留平行边的临时图中找桥,区分所有 MST 必选、部分可选与完全不可选,附证明与非递归 C++17。
先构造一棵最小生成树,再用倍增查询树路径最大边,独立求每条指定边必须保留时的最小费用,附交换证明、等权边辨析与完整 C++17。
用深度符号把隔层变号的子树更新变成统一区间加,再以迭代 DFS 和差分树状数组在线回答单点查询,附正确性证明、手工演算与完整 C++17。
把子树灌水与根路径排水转换为区间赋值,证明重链编号同时保留子树连续性与路径分段界,附无递归树遍历 C++17 和独立模拟验证。
子树众数不能只合并孩子的答案;保留完整颜色频次,按子树顶点数选择大袋,再用质量翻倍证明 O(n log² n),附非递归 C++17 与独立子树枚举验证。
区间和不能直接异或,但每个二进制位的一的数量可以整段翻转;推导节点摘要、异或标记组合与下传不变量,附完整 C++17 和直接数组独立验证。
区间取模不能直接套区间和懒标记,但最大值可以识别无效更新;用减半证明与势能分析解释总成本,附 C++17 和朴素数组独立对拍。
把动态子树染色展平成区间赋值,用 60 位颜色集合维护不同颜色数,推导覆盖标记的组合与下传,附非递归 DFS、完整 C++17 实现和独立树上模拟对拍。
从 Powerful array 的频次平方和推导单点增删,用分块和蛇形排序控制窗口移动,附正确性证明、手算轨迹、复杂度分析、C++17 实现与独立对拍。
用 455B、706D 和 842D 理解 Trie 如何压缩公共前缀,并把字符选择、动态最大异或与累计异或后的 MEX 统一成树上的逐层决策,附正确性证明、手算、三份 C++17 与独立随机验证。
用 126B、432D 和 471D 理解前缀函数的回退链、前后缀出现次数与整体平移不变量,附手算、正确性证明、三份完整 C++17 和独立暴力验证。
用 427C、999E 和 949C 串起强连通分量、缩点 DAG、源分量与汇分量,包含非递归 Kosaraju、费用计数与维护依赖的正确性证明、手算和三份完整 C++17。
用 1328E、1304E、519E 串起祖先关系、倍增距离、精确步数的奇偶性和树上中点计数,附三份完整 C++17、手算与独立暴力验证。
从 459D 前后缀频次、61E 递减三元组到 911D 区间反转,用扫描不变量、树状数组和奇偶性压缩序列计数,附三份完整 C++17 与独立暴力验证。
从一次固定根的子树统计出发,推导换根跨过一条边时的增减量,解决 1092F 距离加权和、1187E Tree Painting 与 1324F Maximum White Subtree。
用 545E、449B、938D 三题扩展 Dijkstra:在最短距离不变时最小化树边总重,识别可删除的特殊列车边,并用虚拟源点与多源初始化统一“去哪里买票”。
用 5C、1313C2、1407D 三题理解栈保存失配边界、单调栈合并区间贡献,以及两组单调栈如何压缩隐式图上的动态规划转移。
用 1167C、277A 与 1213G 深入练习并查集:压缩群组关系、处理没有初始连接的特殊边界,并按边权离线统计树上路径对数。
用 1385E、1572A 与 909E 比较三种拓扑排序变体:按拓扑位置给边定向、在依赖图上计算最少轮数,以及通过分批处理最小化协处理器调用。
用 1036C、628D 与 55D 三道递进题系统讲解数位 DP:从非零位计数和 tight 边界,走到位置与余数状态,再压缩数字最小公倍数。
用 52C、380C 与 474F 三道进阶题拆解线段树节点摘要:从环形区间加与区间最小值,走到有序括号合并和 GCD 频次统计。
用 115A、580C 与 1336A 三道递进题练习树上 DFS:从最大深度、根到叶路径状态,走到子树大小与可证明的贪心贡献。
把逐轮交替的 OR/XOR 归约建成一棵完全二叉树,使单点修改只重算叶子到根的路径,并用节点高度决定合并运算。
反转“固定长度枚举区间”的视角,为每个元素求出它能作为最小值支配的最大区间,再用答案单调性补齐所有窗口长度。
把按编号访问的树上 DFS 展平成先序数组,用进入位置与子树大小把每次查询化为一次数组下标访问,并用迭代写法避开深树栈溢出。
从相邻名称的首个不同字符提取字母先后约束,处理前缀矛盾,再用 Kahn 拓扑排序构造完整字母表并检测有向环。
把建电站转化为连接虚拟源点,证明任意供电方案都对应一棵生成树,再用 Kruskal、并查集和 64 位整数构造最小成本电网。
用并查集识别生成森林之外的多余边,证明 k 个连通分量恰需 k-1 次改路,给出可执行的 C++17 构造,并用图搜索与穷举生成树独立验证最优性。
从左右移动预算推导位移不变量,证明最少左移同时最少右移,用双端队列实现 0-1 BFS,并通过保留两种预算的独立状态搜索验证 C++17 解法。
从无权 BFS 进入正权图最短路,完整推导 Dijkstra 的贪心不变量、小根堆实现、过期条目处理和父节点路径还原,并覆盖重边、自环、不可达与溢出边界。
把两种数字操作建模为状态图,用 BFS 分层找到最少步数,再通过逆向思考与交换论证得到对数级解法,附边界证明、推演图与 C++17 代码。
用 Flowers 串起序列计数、空方案、唯一拆分和区间求和,附手工推演、正确性证明与完整 C++17 代码。
从 189A Cut Ribbon 与 455A Boredom 出发,通过贪心反例、状态表、正确性证明和 C++17 实现理解一维动态规划。
用 1201C、670D1 与 371C 把最大化问题改写为单调可行性判断,并系统处理半开边界、上界构造和整数溢出。
用 160A、230A 与 545C 练习选择顺序、交换论证和局部最优,并把“看起来合理”写成可以检查的正确性说明。
用 313B、816B、276C 与 295A 理解前缀统计、差分覆盖、排序贪心和对操作序列再做一次差分。
用 363B、279B、580B 与 706B 比较固定窗口、排序双指针和二分查询,理解单调边界与复杂度分析。
用 4A、71A、231A、158A 与 50A 五道 800 分题,练习从自然语言中提取条件、状态、边界与简单最优性证明。