LuoguP4012 深海機械人問題 費用流

2022-05-09 14:03:08 字數 1862 閱讀 5211

深海資源考察探險隊的潛艇將到達深海的海底進行科學考察。

潛艇內有多個深海機械人。潛艇到達深海海底後,深海機械人將離開潛艇向預定目標移動。

深海機械人在移動中還必須沿途採集海底生物標本。沿途生物標本由最先遇到它的深海機械人完成採集。

每條預定路徑上的生物標本的價值是已知的,而且生物標本只能被採集一次。

本題限定深海機械人只能從其出發位置沿著向北或向東的方向移動,而且多個深海機械人可以在同一時間佔據同一位置。

用乙個p×q 網格表示深海機械人的可移動位置。西南角的座標為 (0,0),東北角的座標為 (q,p) 。

給定每個深海機械人的出發位置和目標位置,以及每條網格邊上生物標本的價值。

計算深海機械人的最優移動方案, 使深海機械人到達目的地後,採集到的生物標本的總價值最高。

輸入格式:

檔案的第 1行為深海機械人的出發位置數 a,和目的地數 b 。

第 2行為 p和 q的值。

接下來的 p+1行,每行有 q個正整數,表示向東移動路徑上生物標本的價值,行資料依從南到北方向排列。

再接下來的 q+1行,每行有 p個正整數,表示向北移動路徑上生物標本的價值,行資料依從西到東方向排列。

接下來的 a 行,每行有 3個正整數 k,x,y,表示有 k個深海機械人從 (x,y)位置座標出發。

再接下來的 b行,每行有 3個正整數 r,x,y ,表示有 r個深海機械人可選擇 (x,y)位置座標作為目的地。

a行和b行輸入時橫縱座標要反過來

輸出格式:

輸出採集到的生物標本的最高總價值.

輸入噴我一臉。

在邊界建兩條流,一條流量為1有費用,一條為0無費用

**:

1 #include2 #include3 #include4 #include5

const

int oo=0x3f3f3f3f;6

struct

pntp[100000

];14

struct

ente[1000000

];20

intcnt;

21int

n,m;

22int

s,t;

23int

ns,nt;

24int no[101][101

];25 std::queueq;

26void ade(int f,int t,int v,int

d)27

36bool spfa(void)37

43 p[t].pre=-1

;44 p[s].dis=0

;45 p[s].vis=true;46

while(!q.empty())

47q.pop();

48q.push(s);

49while(!q.empty())

5068}69

}70return p[t].pre!=-1;71

}72int ek(void)73

83}84return

ans;85}

86int

main()

87108

}109

for(int j=0;j<=m;j++)

110120

}121

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

122128

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

129135 printf("

%d\n

",-ek());

136return0;

137 }

luogu P4012 深海機械人問題

費用流問題,每個樣本選一次,就連一條capacity為1,權為給定的值,因為可以重複走,再連capacity為無窮,權為0的邊,再一次連線給定的出點和匯點即可 includeusing namespace std define lowbit x x x typedef long long ll co...

P4012 深海機械人問題

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

深海機械人問題

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