Time Limit: 15 Sec  Memory Limit: 162 MB
Submit: 21007  Solved: 5251
[Submit][Status][Discuss]

Description

现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,
而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形:

左上角点为(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

HINT

2015.4.16新加数据一组,可能会卡掉从前可以过的程序。

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;
}

转载于:https://www.cnblogs.com/ruojisun/p/6537339.html

bzoj 1001: [BeiJing2006]狼抓兔子相关推荐

  1. BZOJ 1001: [BeiJing2006]狼抓兔子【最大流/SPFA+最小割,多解】

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MB Submit: 23822  Solved: 6012 [Submit ...

  2. BZOJ 1001[BeiJing2006]狼抓兔子 最小割转最短路

    Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...

  3. 1001: [BeiJing2006]狼抓兔子(对偶图)

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MB Submit: 23595  Solved: 5940 Descrip ...

  4. 1001: [BeiJing2006]狼抓兔子

    /**************************************************************Problem: 1001User: whymheLanguage: C+ ...

  5. 对偶图 【BZOJ】1001: [BeiJing2006]狼抓兔子(对偶图+最短路)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1001 可谓惨不忍睹,一下午就在调这题了. 很久以前看到这题是一眼最大流,看到n<=1000,我 ...

  6. 【BZOJ - 1001】狼抓兔子(无向图网络流,最小割,或平面图转对偶图求最短路SPFA)

    题干: 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...

  7. 【bzoj 1001】狼抓兔子

    Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个 ...

  8. BZOJ1001[BeiJing2006]狼抓兔子——最小割

    题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...

  9. 1001. [BJOI2006]狼抓兔子【最小割】

    Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...

最新文章

  1. C程序演示产生僵死进程的过程
  2. 对java多线程里Synchronized的思考
  3. [总结]vue开发常见知识点及问题资料整理(持续更新)
  4. ZooKeeper 3.4.5 分布式环境搭建详解
  5. IBatis.Net学习笔记二--下载、编译、运行NPetShop
  6. Bit-Z生态联盟正式上线 开启全球加密货币市场新征程
  7. 倒计时css和js html代码,手把手教你利用CSS和JS创建一个倒数计时器
  8. c语言程序设计基础广西师范大学漓江学院,广西师范大学漓江学院试卷-计算机基础A方案.doc...
  9. BBlean最初级的入门幽默教程
  10. 使用字节流复制一个文件夹
  11. oracle 数据迁移跑批,Oracle数据库纯数据的导出与导入
  12. linux的forx函数-进程控制
  13. GD32 MCU USB开发学习记录
  14. 苹果ID登陆第三方有漏洞?硬核!Gartner报告腾讯云数据库增速国内第一;“小米快递”商标注册,这是要入局物流领域?...
  15. [转载] 采访:蔡学镛谈复杂事务处理(CEP)
  16. 华三防火墙应用二层和三层的配置实例
  17. 教育之星 计算机,冉冉升起的教育之星
  18. python是什么?能干什么
  19. 浏览器插件自动点击程序
  20. Linux中sysstat服务,Linux如何使用sysstat中的命令

热门文章

  1. 最近项目用到Dubbo框架,临时抱佛脚分享一下共探讨(转)
  2. python 之 append extend
  3. 玩转开放式虚拟格式,实战迁移虚拟机到vSphere 5
  4. NET 2.0中WinForm自定义的程序配置存放到哪里去了
  5. Baidu小窥(一)
  6. android网络质量,基于Android的移动通信网络质量信息系统的设计与开发
  7. 【正一专栏】希望才是深深让人绝望的东西-论国足
  8. Leetcode 129. 求根到叶子节点数字之和 解题思路及C++实现
  9. 计算机网络管理考试价格,2021年计算机网络管理员考试模拟试题库和答案...doc...
  10. Python 技术篇 - 查看python库都包含什么方法,查看python模块某个方法的具体用法源码,查看python模块所在的物理位置,查看python库都包含哪些属性