差分约束 做题笔记
基本思想就是想办法转换成为一个差分相减的形式,建立关系跑最短(长)路
P5960 【模板】差分约束算法-------------------------模板题
P3275 [SCOI2011] 糖果 --------------------------------考察对于差分约束各种条件的建图,还有Tarjan缩点
P3530 [POI2012] FES-Festival------------------------基于floyed的差分约束
转换关系为前缀和求解建图(比较巧妙)
这题因为 a b 可以为 0,又因为要满足 0 <= d[ i ] - d[ i-1 ] <= 1,那么可能 i - 1 会小于0
所以整体编号应该是加一的,因此本应该是连 x-1 --> y ,整体加一后就是连一条 x --> y+1
转换为前缀和建图(设立一个超级源点,到各个1点连一条0的边)
构建差分关系建图(很巧妙),同时需要转换一下等式
二分+差分约束(每次二分重构一张图)
同时他的差分关系转化非常有意思,和高中数学某种做题技巧一模一样
转换:
- 对于乘除想要转换成差分形式,可以取对数(log)
前缀和建图,通过正难则反记录0的前缀和,将边权全部转换为正数,通过Dijkstra跑最短路求0的最大解,那么就可以转换为1的最小解
- 特别注意对于a=b这种关系的建图
- 应该要建两条边因为a=b拆成的是a<=b&&a>=b