bzoi2006 狼抓兔子 最小割

2021-07-03 14:54:24 字數 1449 閱讀 5358

現在小朋友們最喜歡的」喜羊羊與灰太狼」,話說灰太狼抓羊不到,但抓兔子還是比較在行的,而且現在的兔子還比較笨,它們只有兩個窩,現在你做為狼王,面對下面這樣乙個網格的地形:

左上角點為(1,1),右下角點為(n,m)(上圖中n=4,m=5).有以下三種型別的道路 1:(x,y)<==>(x+1,y) 2:(x,y)<==>(x,y+1) 3:(x,y)<==>(x+1,y+1) 道路上的權值表示這條路上最多能夠通過的兔子數,道路是無向的. 左上角和右下角為兔子的兩個窩,開始時所有的兔子都聚集在左上角(1,1)的窩裡,現在它們要跑到右下解(n,m)的窩中去,狼王開始伏擊這些兔子.當然為了保險起見,如果一條道路上最多通過的兔子數為k,狼王需要安排同樣數量的k只狼,才能完全封鎖這條道路,你需要幫助狼王安排乙個伏擊方案,使得在將兔子一網打盡的前提下,參與的狼的數量要最小。因為狼還要去找喜羊羊麻煩.

input

第一行為n,m.表示網格的大小,n,m均小於等於1000.接下來分三部分 第一部分共n行,每行m-1個數,表示橫向道路的權值. 第二部分共n-1行,每行m個數,表示縱向道路的權值. 第三部分共n-1行,每行m-1個數,表示斜向道路的權值. 輸入檔案保證不超過10m

output

輸出乙個整數,表示參與伏擊的狼的最小數量.

sample input

3 4

5 6 4

4 3 1

7 5 3

5 6 7 8

8 7 6 5

5 5 5

6 6 6

sample output

14 題解:轉對偶圖後跑最短路就好了。具體參見**《兩極相通——**最大—最小定理在資訊學競賽中的應用》

**:

#include

#include

#include

using

namespace

std;

int cnt,point[1000001],dis[1000001],l[1000001],next[1000001],n,m,c,s,t,tt1;

bool f[1000001];

struct useb[2000000];

void add(int x,int y,int z)

int spfa(int x,int y)

} }

return dis[y]>21000000?0:dis[y];

} int main()

for (int i=2;i<=n;i++)

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

for (int i=2;i<=n;i++)

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

cout

<

}

bzoj1001 狼抓兔子 最小割

題意概述 給出一張無向圖,每條邊有乙個權值,割掉這條邊代價為它的權值,求使起點不能到達終點的最小代價。顯然能看出這是個最小割嘛,然後最小割 最大流,建圖的時候特殊處理一下再跑個最大流就好了。include include include include include using namespace...

ICPC Beijing 2006 狼抓兔子

題目描述 題解 裸的最小割。但是最大流跑不過去怎麼辦?轉變一下,既然最大流是一條左下 右上的通路,我們可以把圖劃分為若干區域,最後找左下到右上的最短路就行了。include include include include using namespace std typedef long long l...

BeiJing2006 狼抓兔子

現在小朋友們最喜歡的 喜羊羊與灰太狼 話說灰太狼抓羊不到,但抓兔子還是比較在行的,而且現在的兔子還比較笨,它們只有兩個窩,現在你做為狼王,面對下面這樣乙個網格的地形 左上角點為 1,1 右下角點為 n,m 上圖中n 4,m 5 有以下三種型別的道路 1 x,y x 1,y 2 x,y x,y 1 3...