日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bzoj 1001: [BeiJing2006]狼抓兔子

發(fā)布時間:2025/4/14 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bzoj 1001: [BeiJing2006]狼抓兔子 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Time Limit:?15 Sec??Memory Limit:?162 MB
Submit:?21007??Solved:?5251
[Submit][Status][Discuss]

Description

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

?

左上角點為(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)? 道路上的權(quán)值表示這條路上最多能夠通過的兔子數(shù),道路是無向的. 左上角和右下角為兔子的兩個窩, 開始時所有的兔子都聚集在左上角(1,1)的窩里,現(xiàn)在它們要跑到右下解(N,M)的窩中去,狼王開始伏擊 這些兔子.當(dāng)然為了保險起見,如果一條道路上最多通過的兔子數(shù)為K,狼王需要安排同樣數(shù)量的K只狼, 才能完全封鎖這條道路,你需要幫助狼王安排一個伏擊方案,使得在將兔子一網(wǎng)打盡的前提下,參與的 狼的數(shù)量要最小。因為狼還要去找喜羊羊麻煩.

Input

第一行為N,M.表示網(wǎng)格的大小,N,M均小于等于1000. 接下來分三部分 第一部分共N行,每行M-1個數(shù),表示橫向道路的權(quán)值.? 第二部分共N-1行,每行M個數(shù),表示縱向道路的權(quán)值.? 第三部分共N-1行,每行M-1個數(shù),表示斜向道路的權(quán)值.? 輸入文件保證不超過10M

Output

輸出一個整數(shù),表示參與伏擊的狼的最小數(shù)量.

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

HINT

?

?2015.4.16新加數(shù)據(jù)一組,可能會卡掉從前可以過的程序。

?

Source

?

最大流?

屠龍寶刀點擊就送

#include <algorithm> #include <cstring> #include <cstdio> #include <queue>using namespace std;struct node {int next,to,value; }edge[6000006]; int deep[1000001],S,T,n,m,head[1000001],cnt=1,Answer; void add_edge(int from,int to,int v) {edge[++cnt].next=head[from];edge[cnt].to=to;edge[cnt].value=v;head[from]=cnt; } bool bfs(int s,int t) {queue<int>Q;memset(deep,-1,sizeof(deep));deep[s]=0;Q.push(s);while(!Q.empty()){int tp=Q.front();Q.pop();for(int i=head[tp];i!=-1;i=edge[i].next){int v=edge[i].to;if(deep[v]==-1&&edge[i].value>0){deep[v]=deep[tp]+1;if(v==t) return 1;else Q.push(v);}}}return 0; } void qr(int &x) {x=0;int f=1;char ch=getchar();while(ch>'9'||ch<'0'){if(ch=='-') f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+(int)ch-48;ch=getchar();} } int dfs(int now,int to,int flow) {int rest=0,f;if(now==to) return flow;for(int i=head[now];i!=-1;i=edge[i].next){int v=edge[i].to;if(edge[i].value>0&&deep[v]==deep[now]+1&&(f=dfs(v,to,min(edge[i].value,flow-rest)))){rest+=f;edge[i].value-=f;edge[i^1].value+=f;if(rest==flow) break;}}if(rest!=flow) deep[now]=-1;return rest; } void Dinic(int s,int t) {while(bfs(s,t))Answer+=dfs(s,t,1e9); } int main() {memset(head,-1,sizeof(head));qr(n);qr(m);S=0;T=1+n*m;int w;for(int i=1;i<=n;++i){for(int j=1;j<m;++j){qr(w);add_edge(j+m*(i-1),j+m*(i-1)+1,w);add_edge(j+m*(i-1)+1,j+m*(i-1),w);}}for(int i=1;i<n;++i){for(int j=1;j<=m;++j){qr(w);add_edge(j+m*(i-1),j+m*i,w);add_edge(j+m*i,j+m*(i-1),w);}}for(int i=1;i<n;++i){for(int j=1;j<m;++j){qr(w);add_edge(j+m*(i-1),i*m+j+1,w);add_edge(j+m*i+1,(i-1)*m+j,w);}}add_edge(S,1,1e9);add_edge(1,S,1e9);add_edge(n*m,T,1e9);add_edge(T,n*m,1e9);Dinic(S,T);printf("%d",Answer);return 0; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/ruojisun/p/6537339.html

總結(jié)

以上是生活随笔為你收集整理的bzoj 1001: [BeiJing2006]狼抓兔子的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。