打鳥問題 網路流 EK演算法

2021-10-06 15:58:59 字數 1651 閱讀 2953

成績

10開啟時間

2023年04月21日 星期二 17:15

折扣0.8

折扣時間

2023年05月30日 星期六 23:55

允許遲交

否關閉時間

2023年05月30日 星期六 23:55

在乙個 n * m (0 < m, n <=100) 的方陣中有 k(0[輸入]

輸入包含多組測試資料。

每組測試資料第一行有三個整數 n, m, k 。

接下來一行有 n 個整數,第 i 個整數表示在第 i 行開一槍所需的花費 ri 。

接下來一行有 m 個整數,第 j 個整數表示在第 j 行開一槍所需的花費 cj 。

接下來 k 行,每行有兩個整數 x, y (0[輸出]

對於每組測試資料,請輸出一行,包含乙個整數,即打死該圖中所有鳥所需的最小花費值。

測試輸入

期待的輸出

時間限制

記憶體限制

額外程序

測試用例 1

以文字方式顯示

2 2 1↵

1 2↵

2 1↵

1 1↵

2 3 2↵

100 2↵

1 1 1↵

1 1↵

1 2↵

以文字方式顯示

1↵2↵

1秒64m

0

本題可以轉化為乙個網路流問題,按照如下建圖

?點的設定:

?邊的設定:

建圖(注意點的標號哈!需要小改動)完成後直接用ek演算法的板子求圖的最大流,即為打死所有鳥所需的最小總花費。

上板子上板子!直接看這個:網路流初步最大流(ek演算法和dinic演算法高階),**沒有問題!

關於 ek 演算法的理解留乙個坑....以後補上

#include #include #include #include using namespace std;

const int maxn = 605;

const int inf = 0x7fffffff;

int n, m, k;

int s, e; //源點與匯點

int map[maxn][maxn]; //記錄當前圖的殘餘部分

bool init()

return true;

}bool vis[maxn];

int pre[maxn]; //儲存增廣路徑,pre[x] = y:x點的前驅節點是y

/* 找到一條從 start 到 end 的增廣路徑 */

bool bfs() }}

return false;

}/* 尋找增廣路徑上的最小權值 */

int calcincrease()

int edmondskarp()

max_flow += increase; //更新最大流

}return max_flow;

}int main()

網路流 EK演算法

ek演算法的思路 基於貪心的思想,每次選取一條起點到終點的路徑,毋庸置疑,這條路的流量就等於這條路徑上的權值是最小值。將這條路的權值都減去流量,再將路徑的反向邊加上流量 這樣可以就給貪心一次反悔的機會 無限迴圈以上步驟,到找不到任何一條起點到終點的路,最後所有的最小值加起來就是最大流了。這只是我對e...

網路流 費用流Ek演算法講解

前一篇部落格寫的是最大流。先簡要說一下思路,方便下面的講解。最大流求解是先跑一遍bfs,把每個點定義乙個深度,跑dfs的同時連線一條反向邊方便反悔,避免不必要的時間。現在說一下費用流。費用流的全稱是最小費用最大流 或最大費用最大流 保證最小費用的情況下跑最大流。最小費用?bfs spfa成功解決。我...

網路流 EK演算法及其優化

今天上午我彷彿知道了什麼叫做網路流,這裡推薦一篇部落格,大家入門網路流的可以看一下這篇部落格,保證一看就懂!codevs 1993 include include include include using namespace std const int inf 0x7ffffff queue q ...