平面图一定要想到"连续"的性质。不可能存在 4 个依序的点 a,b,c,d,满足 a,c 连通,b,d 连通,但 a,b,c,d 不全连通。qwq qaq
二进制具有独立性。如果不完全独立,就把不完全独立的部分塞到状态里,独立的部分记录在 dp 值中。\(\sum k_i2^i\) 只有在高 \(\max k\) 位是不独立的。qwq
\(\color{red}\dagger\) 树上点 \(u\) 的 \(d\)-邻域和 \(fa_u\) 的 \(d\)-邻域具有极强的相关性。\(\delta(u,d-1)\subseteq \delta(fa_u,d)\subseteq \delta(u,d+1)\),\(\left|\mathrm{dis}(u,x)-\mathrm{dis}(fa_u,x)\right|\le 1\)。这个技巧可以用来省去二分。qwq qaq
当题目中出现 \(\times k\) 或者 \(\lfloor {*\over k}\rfloor\) 这样的字眼的时候,且 \(k\) 是全局常数,可以考虑把问题缩小到 \([0,k)\) 的值域内进行考虑;此时 \(\lfloor {*\over k}\rfloor\) 至多改变一次,可以利用好这个性质。qwq
有时候我们会对 dp 出来的结果再进行一遍容斥处理,不要忘了可以改为在 dp 的过程中进行这个容斥。qnq
\(\color{red}\dagger\) 对于费用流的题目,要想办法找到"性质相同则产生额外代价(或收益减少,等价)"的关键部位进行处理,利用费用流的凸性。qwq
网格图上网络流的题目一般都是 \(S\) 连白点,黑点连 \(T\)。
对于建出图跑差分约束的题目,如果直接建图边数很多,不妨考虑一下是怎么连出这么多边的,可以改为跑 \(n\) 轮收缩,每轮内用数据结构维护这些边的贡献。每轮内以任意顺序跑每类边都是对的。qwq
\(\color{blue}\dagger\) 可以使用异或哈希的技巧方便地将点分成若干类,避免压栈弹栈的各种讨论。这里在求边三时用到。qwq
对于所有情况的最大值求和,要记得想办法转化成若干偏序关系,转为在所有偏序下求和。qwq
\(\color{blue}\dagger\) 可以用 bitset
支持 _Find_First
的性质找到满足条件的点中值最小的,用预处理时间前缀的 bitset
来截取一段合法区间。qwq
\(\color{red}\dagger\) 平面图还应该想到欧拉定理。我们都不喜欢算面,但是我们都喜欢算点和边。算是一种广义的点减边。qwq qnq
"跳一跳"类型的题目,除了要想到值域倍增,还要想到位置倍增,例如第一次跳出某个线段树节点,第一次跳过某个猫树中点。qnq