求最大值:跑最短路,约束条件写作
d
v
−
d
u
<
=
w
d_v-d_u<=w
dv−du<=w,连边
u
−
>
v
边
权
w
u->v边权w
u−>v边权w,松弛条件为一般最短路条件,若图中存在负环则无解。
求最小值,约束条件一般为
d
v
−
d
u
>
=
w
d_v-d_u>=w
dv−du>=w,将不等式连边同乘-1,写作小于等于形式,跑最短路,最后结果为答案取相反数。
建图技巧:
- 如果{ a 1 , a 2 , . . . a n a_1,a_2,...a_n a1,a2,...an}是一组解,那么对于任意的常数 b b b,{ a 1 + b , a 2 + b , . . . a n + b a_1+b,a_2+b,...a_n+b a1+b,a2+b,...an+b}显然也是一组解,故可以先求一组负数解,即假设 ∀ i , X i < = 0 \forall i,X_i<=0 ∀i,Xi<=0,然后增加一个0节点,令 X 0 = 0 X_0=0 X0=0。这样以来就多了n个形如 X i − X 0 < = 0 X_i-X_0<=0 Xi−X0<=0的条件,应从0向每个节点连一条边权为0的边,从0开始跑最短路,即能跑出一组解。
- 前缀和思想建图,这种类型题目中往往会指出所有的位置或物品平铺在一条数轴上,然后给出若干个区间内限制信息,例如 ∀ i , [ l i , r i ] 内 物 品 数 量 < = w i \forall i,[l_i,r_i]内物品数量<=w_i ∀i,[li,ri]内物品数量<=wi,如果用sum[]来表示前缀和,也即: s u m [ r ] − s u m [ l − 1 ] < = w sum[r]-sum[l-1]<=w sum[r]−sum[l−1]<=w,故只需在 l − 1 与 r 之 间 连 边 即 可 l-1与r之间连边即可 l−1与r之间连边即可,当然题目中有时还会有一些特殊限制条件,比如每个位置上只能放一个物品,那么: ∀ i , s u m [ i ] − s u m [ i − 1 ] < = 1 , s u m [ i − 1 ] − s u m [ i ] < = 0 \forall i,sum[i]-sum[i-1]<=1,sum[i-1]-sum[i]<=0 ∀i,sum[i]−sum[i−1]<=1,sum[i−1]−sum[i]<=0,当然还可能限制总物品数量,那么: s u m [ n ] − s u m [ 0 ] < = a l l sum[n]-sum[0]<=all sum[n]−sum[0]<=all。
- 待更