description
現在小朋友們最喜歡的"喜羊羊與灰太狼",話說灰太狼抓羊不到,但抓兔子還是比較在行的,
而且現在的兔子還比較笨,它們只有兩個窩,現在你做為狼王,面對下面這樣乙個網格的地形:
左上角點為(1,1),右下角點為(n,m)(上圖中n=4,m=5).有以下三種型別的道路
1:(x,y)=>(x+1,y) , (x+1,y)=>(x,y)
2:(x,y)=>(x,y+1) , (x,y+1)=>(x,y)
3:(x,y)=>(x+1,y+1) , (x+1,y+1)=>(x,y)
道路上的權值表示這條路上最多能夠通過的兔子數,道路是無向的. 左上角和右下角為兔子的兩個窩,
開始時所有的兔子都聚集在左上角(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 45 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裸的網路流
一開始一直t,審視一下,其實是我自己寫的有問題,網路流建雙向邊的時候,只需要將反向邊的流量設為與正向邊一樣即可。
#include
#include
#include
#include
#include
#include
#include
#define ll long long
using
namespace std;
char buffer[
100001],
*s,*t;
inline
char
get_char()
return
*s++;}
inline
intread()
const
int maxn=
6001000
;const
int maxm=
1001000
;const
int inf=
0x3f3f3f3f
;int head[maxm]
,ver[maxn]
,edge[maxn]
,nt[maxn]
;int d[maxm]
;int n,m,s,t,tot;
queue<
int>q;
void
add(
int x,
int y,
int z)
//建雙向邊注意反向邊的流量。
bool
bfs(
void)}
}return
false;}
intdinic
(int x,
int flow)
}return flow-rest;
}int
get_max
(void
)int
main
(void)}
for(
int i=
1;ifor(
int i=
1;is=
1,t=
(n-1)*
1000
+m;printf
("%d\n"
,get_max()
);return0;
}
1001 BeiJing2006 狼抓兔子
現在小朋友們最喜歡的 喜羊羊與灰太狼 話說灰太狼抓羊不到,但抓兔子還是比較在行的,而且現在的兔子還比較笨,它們只有兩個窩,現在你做為狼王,面對下面這樣乙個網格的地形 左上角點為 1,1 右下角點為 n,m 上圖中n 4,m 5 有以下三種型別的道路 1 x,y x 1,y 2 x,y x,y 1 3...
BeiJing2006 狼抓兔子
現在小朋友們最喜歡的 喜羊羊與灰太狼 話說灰太狼抓羊不到,但抓兔子還是比較在行的,而且現在的兔子還比較笨,它們只有兩個窩,現在你做為狼王,面對下面這樣乙個網格的地形 左上角點為 1,1 右下角點為 n,m 上圖中n 4,m 5 有以下三種型別的道路 1 x,y x 1,y 2 x,y x,y 1 3...
BeiJing2006 狼抓兔子
現在小朋友們最喜歡的 喜羊羊與灰太狼 話說灰太狼抓羊不到,但抓兔子還是比較在行的,而且現在的兔子還比較笨,它們只有兩個窩,現在你做為狼王,面對下面這樣乙個網格的地形 左上角點為 1,1 右下角點為 n,m 上圖中n 4,m 5 有以下三種型別的道路 1 x,y x 1,y 2 x,y x,y 1 3...