思维路径

更新到:Educational Codeforces Round 10 题解


树上问题

与某一点的子树有关的,思考树形 dp,dsu on tree
如果是某个点与所有点有关,对所有点求答案,就考虑换根 dp。能换根的前提是 dp 方程可以轻松地修改(取 / 不取某一个子树)(1 2

与某两个点有关的,考虑取 LCA,或者路径上一些特殊点(比如路径中点,树的重心)(1

树上前缀和、树上差分?(1

各种树的性质?树上各种点的性质?(1直径 2还是直径

图论如果涉及到环或者强连通分量,考虑 tarjan 缩点;或者如果一堆特征相似的东西可以合并考虑,也考虑缩点思想(1 2 3

必经点:割点;必经边:割边(1

特征点最短路,图中有多个特殊的点,到达某点可以获得加成(1

图论模型!!!
一切涉及到状态转换的题目,要求满足传递性
执行操作?如果操作的几个参数具有传递性,执行一种操作等价于执行另一连串操作(类似于两个点之间有多条路径)(1
满足传递性的点在一个联通块内(2
一次操作是从一个状态转移到另一个状态(3

括号序列转换为 +1 和 -1 或者是 1 和 0,差分思想(1转化为+1-1的折线图思想,虽然不是括号序列 2维护左括号减右括号的数量 3维护左括号减右括号的数量

括号序列也可以区间 DP 做

事件思想,一条线段的左端点看成 +1 事件,右端点看成 -1 事件(1

无法直接计算的题目转化为算贡献,使用数组或者哈希表记录可能产生贡献的元素(1 2 3 4 这个实在太多了以后就不整理了)

前缀和式子导出的区间相等 \(a_{r_1} - a_{l_1 - 1} = a_{r_2} - a_{l_2 - 1}\) 往往有奇妙的性质,尝试移项?(1

动态研究添删一个物品,考虑添删这个物品的过程和影响(1
拓展:从一个合法状态“扩张”到另一个合法状态(2
拓展:单调栈、单调队列解决问题(3

类似于树状数组求逆序对的思想,边插入边求值(1 2 3 4

位运算独立考虑每一位(1 2 3 4 5

逐位运算,求最值(类似异或),从高位往低位贪心(1

Mex 可以用权值数据结构二分做(1

题目可以转化成 DAG 上跑 DP(1 2
缩点后 DAG 上跑 DP(3

DP 消掉后效性:最短路转移(SPFA Dij),排序(1虽然这个不是DP,但是利用了排序消除后效性的思想 2排序消除背包物品的后效性

DP 的值可以加入当前状态,也可以不加(1

如果题目有两个自相矛盾的限制,其中一个要优先满足,考虑两次 DP(无后效性的特点)(1

先用一个 DP 预处理,再用一个 DP 求答案,也是两次 DP(1

构造方案题!!!
考虑 DP 转移:设 bool f[][][] 表示当前状态是否有解(如果要求最优则定义最优子结构),g[][][] 表示当前状态从哪里转移过来的(1 2但是这个并不需要输出方案 3bitset优化背包

涉及到整除 2 的(\(\lfloor\frac{n}{2}\rfloor\)),路径中点可能不存在的,考虑按奇偶性分类讨论(1

补集转换!!!
子树外有 \(k\) 个转换成子树内有 \(tot - k\) 个(1

一维序列上对连续一段操作用差分转换为单点问题(1

二分答案!!!
到底有没有单调性?(1 2

小于某个数设成 0,大于某个数设成 1(1《HEOI/TJOI排序》 2中位数金字塔,经典题了 3

二维平面中维护特殊线段(垂直 x 轴,垂直 y 轴,对角线)的区间和:树状数组(1 2

遇事不要慌,先想想是不是假题
暴力构造的复杂度?(1

会做 \(k\) 但不会做 \(k + 1\)?有一维不会处理?枚举它!(1 2 3 4
高端算法不会做,先想想好做的(5

两维的独立问题? 放到平面坐标系上试试!(1

区间问题:前缀的后缀 / 后缀的前缀(1 2KMP 3

修改一个数,求最长区间?双指针维护往左往右(1
预处理出往左走、往右走最远的符合条件的位置(2 2

支持离线,查询区间,可以快速添删区间左右端点的元素:莫队(1 2 3

支持快速添删一个元素,查询最值,查询相邻元素,使用 std::setstd::multiset1 2 3

连续跳有点慢?考虑倍增(1

posted @ 2021-10-18 09:40  Handwer  阅读(128)  评论(0编辑  收藏  举报