luogu P4012 深海機械人問題

2022-08-19 07:12:07 字數 1235 閱讀 4763

費用流問題,每個樣本選一次,就連一條capacity為1,權為給定的值,因為可以重複走,再連capacity為無窮,權為0的邊,再一次連線給定的出點和匯點即可

#includeusing

namespace

std;

#define lowbit(x) ((x)&(-x))typedef

long

long

ll;const

int maxm = 3e3+5

;const

int inf = 0x3f3f3f3f

;struct

edge edges[maxm];

int head[maxm], cur[maxm], cnt, fa[1024], d[1024

], p, q;

bool inq[1024

];void

init()

void add(int u, int v, int cap, int

cost) ;

head[u] = cnt++;

}void addedge(int u, int v, int cap, int

cost)

bool spfa(int s, int t, int &flow, ll &cost) }}

}if(d[t] == inf) return

false

; flow +=cur[t];

cost += 1ll*d[t]*cur[t];

for(int u = t; u != s; u =edges[fa[u]].u)

return

true;}

int mincostmaxflow(int s, int t, ll &cost)

void

run_case()

for(int i = 1; i <= q; ++i)

for(int j = 1; j < p; ++j)

int s = 0, t = p*q+2

;

for(int i = 0; i < a; ++i)

for(int i = 0; i < b; ++i)

ll cost = 0

; mincostmaxflow(s, t, cost);

cout

<< -cost;

}int

main()

view code

LuoguP4012 深海機械人問題 費用流

深海資源考察探險隊的潛艇將到達深海的海底進行科學考察。潛艇內有多個深海機械人。潛艇到達深海海底後,深海機械人將離開潛艇向預定目標移動。深海機械人在移動中還必須沿途採集海底生物標本。沿途生物標本由最先遇到它的深海機械人完成採集。每條預定路徑上的生物標本的價值是已知的,而且生物標本只能被採集一次。本題限...

P4012 深海機械人問題

深海資源考察探險隊的潛艇將到達深海的海底進行科學考察。潛艇內有多個深海機械人。潛艇到達深海海底後,深海機械人將離開潛艇向預定目標移動。深海機械人在移動中還必須沿途採集海底生物標本。沿途生物標本由最先遇到它的深海機械人完成採集。每條預定路徑上的生物標本的價值是已知的,而且生物標本只能被採集一次。本題限...

深海機械人問題

這題的題面描述。有點問題。座標寫的很亂。這道題其實和著名dp問題方格取數很像qwq 我們發現機械人可以重複經過邊,但只能對答案貢獻一次,所以兩點間連兩條邊。一條是容量1帶的費用。另一條沒費用容量inf。用拆點嗎?不用的。因為這個權值是走過邊會有,所以這題中不用拆點。起點連s容量機械人,終點連t容量機...