首先差分约束有两个应用 就是求最大值 求最小值
求最大值的时候 就是求最短路
那么就要约束的是每个点的最大值
所以建图要往 <= 这个方向建
比如f1 <= f2 + k, f2 <= f3 + k;
所以最大值应该是 f3 + k + k + f3 + k + f3;
所以 只要建立 add(f2,f3,k) f2 比 f3 大k
所以维护的时候就是 dist[f2] = min(dist[f2]),dist[f3] + k);因为 f2要满足 f2 <= f3 + k;
反之求最小值的时候 那么就是求最长路;
反向约束每个点的最大值
f1>= f2 + k f2 >= f3 + k
所以最小值就是 f3 + 2 * k + f3 + k + f3;
所以要建立 add(f2,f1,k) f1最小要等于f2 + k
所以维护的是 dist[f1] = max(dist[f1],dist[f2] + k) 因为f1 要满足 >= f2 + k;
谈谈自己对差分约束的理解
最新推荐文章于 2022-09-17 17:18:18 发布