第一次见到分层思想和网络流联系起来的题,浅录一下
题目链接: P4009 汽车加油行驶问题
该题方法很多,但是网络流应该是最能接受和理解的吧 (
由于汽油的影响,建图变得不那么容易,常规建图又无法将位置和油量结合起来,所以考虑分层建图
我们定义状态 ( i , j , k ) (i,j,k) (i,j,k)代表走到点 ( i , j ) (i,j) (i,j)时剩余油量为 k k k.
-
建立源点 S S S和汇点 T T T
S ⇒ ( 1 , 1 , K ) S \Rightarrow (1,1,K) S⇒(1,1,K)连容量为 1 1 1,费用为 0 0 0的边
因为不确定到达终点时剩余油量的多少
( n , n , 0 ∽ K ) ⇒ T (n,n,0 \backsim K) \Rightarrow T (n,n,0∽K)⇒T连容量为1,费用为 0 0 0的边
-
对于已经放置加油站的点
由于是强制消费(呜呜),所以无论来之前是多少油都得加满
( i , j , 0 ∽ K − 1 ) ⇒ ( i , j , K ) (i,j,0 \backsim K-1) \Rightarrow (i,j,K) (i,j,0∽K−1)⇒(i,j,K)连容量为 1 1 1,费用为 A A A的边
此时已经为满油状态
( i , j , K ) (i,j,K) (i,j,K)向下一层的 ( i − 1 , j ) (i-1,j) (i−1,j)以及 ( i , j − 1 ) (i,j-1) (i,j−1)连容量为