題意:q∗p
q*pq∗
p的網格,有障礙/平坦地面/岩石標本,求從左上角到右下角最多運送車輛的情況下,運送的石子數最多,輸出車輛走的路徑。
思路:35*35的圖很小,拆點建圖,有石子的一條邊容量為1,費用-1,另一條容量inf,費用0.
最後的輸出答案跑n遍dfs,每次沿著flow>0的邊走到終點,並把路徑上所有的邊flow-1.
#include
using
namespace std;
const
int maxn=
2000*2
+100
;const
int inf=
0x3f3f3f3f
;typedef
long
long ll;
struct edge
;struct mcmf
addedge
(s,0
,n,0);
addedge
(s-1
,t,inf,0)
;for
(int i=
0;i)for
(int j=
0;jvoid
addedge
(int from,
int to,
int cap,
int cost));
edges.
push_back
((edge));
m=edges.
size()
; g[from]
.push_back
(m-2);
g[to]
.push_back
(m-1);
}bool
bellmanford
(ll& flow,ll& cost)}}
}if(d[t]==(
1ll<<50)
)return
false
; a[t]=1
; flow+
=a[t]
; cost+
=a[t]
*d[t]
;int u=t;
while
(u!=s)
return
true;}
ll mincost()
void
dfs(
int node,
int u)}}
void
print()
}ans;
intmain()
洛谷P3356 火星探險問題 費用流
火星探險隊的登陸艙將在火星表面著陸,登陸艙內有多部障礙物探測車。登陸艙著陸後,探測車將離開登陸艙向先期到達的傳送器方向移動。探測車在移動中還必須採集岩石標本。每一塊岩石標本由最先遇到它的探測車完成採集。每塊岩石標本只能被採集一次。岩石標本被採集後,其他探測車可以從原來岩石標本所在處通過。探測車不能通...
洛谷 P3356 火星探險問題
給出一張地圖,上面有一些石塊或障礙,現在有一些運載車從左上角出發,要去右下角,只能向右或向下走,每個石塊只能收集一次,輸出收集到最多石塊的路徑.多個運載車,不難想到是網路流,但難點在於每個石塊最多收集一次,而且要收集最多石塊.可以用費用流來做,每個點拆成兩個入點向出點連一條流量為inf,費用為0的邊...
洛谷 網路流24題 運輸問題
初見安 這裡是傳送門 洛谷p4015 運輸問題 因為貨物的初始量和變化後的量都是確定的,所以這個是最大 最小費用流。其實直接按題目意思建圖就可以了。從s連向每個a倉庫表示分配貨物,從每個b連向t表示限制b商店需要的貨物數量。a和b之間就按照題意連費用流的邊即可。對於這個題的兩個文我們當然可以寫兩個s...