Description Source: Beijing2006 [BJOI2006]

八中OJ上本题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001

如今小朋友们最喜欢的”喜羊羊与灰太狼”,话说灰太狼抓羊不到,但抓兔子还是比較在行的。并且如今的兔子还比較笨,它们仅仅有两个窝,如今你做为狼王,面对以下这样一个网格的地形:

左上角点为(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<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int cnt,point[1000001],dis[1000001],l[1000001],next[1000001],n,m,c,s,t,tt1;
bool f[1000001];
struct use{
int st,en,val;
}b[2000000];
void add(int x,int y,int z)
{
next[++cnt]=point[x];point[x]=cnt;
b[cnt].st=x;b[cnt].en=y;b[cnt].val=z;
next[++cnt]=point[y];point[y]=cnt;
b[cnt].st=y;b[cnt].en=x;b[cnt].val=z;
}
int spfa(int x,int y){
int h,t,u;memset(dis,127/3,sizeof(dis));
dis[x]=0;h=0;t=1;l[t]=x;
while(h<t){
u=l[++h];
for(int i=point[u];i;i=next[i])
if(dis[b[i].en]>dis[u]+b[i].val&&u!=i){
dis[b[i].en]=dis[u]+b[i].val;
if(!f[b[i].en]){
f[b[i].en]=true;
l[++t]=b[i].en;
}
}
}
return dis[y]>21000000?0:dis[y];
}
int main()
{
freopen("bjrabbit.in","r",stdin);
freopen("bjrabbit.out","w",stdout);
scanf("%d%d",&n,&m);
t=2*m*n-2*m-2*n+4;tt1=2*(m-1)*(n-2);
for (int i=1;i<=n;i++)
for (int j=2;j<=m;j++){
scanf("%d",&c);int temp=2*(m-1)*(i-2)+2*(j-1);
if (i==1) add(i+2*(j-1),t,c);if (i==n) add(temp,s,c);
if (i>1&&i<n) add(temp,temp+2*m-1,c);
}
for (int i=2;i<=n;i++)
for (int j=1;j<=m;j++){
int temp=2*(m-1)*(i-2)+2*(j-1);scanf("%d",&c);
if (j==1) add(temp+2,s,c);if (j==m) add(temp+1,t,c);
if (j>1&&j<m) add(temp+1,temp+2,c);
}
for (int i=2;i<=n;i++)
for (int j=2;j<=m;j++){
scanf("%d",&c);int temp=2*(m-1)*(i-2)+2*(j-1);
add(temp,temp+1,c);
}
cout<<spfa(s,t)<<endl;
}

【bzoi2006】【狼抓兔子】【最小割】的更多相关文章

  1. BZOJ1001: [BeiJing2006]狼抓兔子 [最小割 | 对偶图+spfa]

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 19528  Solved: 4818[Submit][ ...

  2. BZOJ 1001 狼抓兔子 (最小割转化成最短路)

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 27715  Solved: 7134[Submit][ ...

  3. bzoj1001: [BeiJing2006]狼抓兔子 -- 最小割

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MB Description 现在小朋友们最喜欢的"喜羊羊与灰太狼 ...

  4. BZOJ 1001: [BeiJing2006]狼抓兔子 最小割

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓 ...

  5. [bzoj 1001][Beijing2006]狼抓兔子 (最小割+对偶图+最短路)

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

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

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

  7. 【bzoj1001】[BeiJing2006]狼抓兔子 最小割+对偶图+最短路

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

  8. BZOJ1001[BeiJing2006]狼抓兔子最小割網絡流

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

  9. B1001 狼抓兔子 最小割

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

  10. BZOJ1001 [BeiJing2006]狼抓兔子 最小割 对偶图 最短路

    原文链接http://www.cnblogs.com/zhouzhendong/p/8686871.html 题目传送门 - BZOJ1001 题意 长成上面那样的网格图求最小割. $n,m\leq ...

随机推荐

  1. [整理]tar压缩下来为什么格式是.tar.gz

    前段时间打包,直接用tar命令压缩,压缩好的文件取名rar.同事用winrar打开发现一直报错. 经过查询发现,tar -cvzf压缩下来的格式其实应该是.tar.gz 但是格式怎么会这么奇怪呢?是压 ...

  2. iOS-----openGL--openGL ES iOS 入门篇--->搭建openGL环境

    OpenGL版本 iOS系统默认支持OpenGl ES1.0.ES2.0以及ES3.0 3个版本,三者之间并不是简单的版本升级,设计理念甚至完全不同,在开发OpenGL项目前,需要根据业务需求选择合适 ...

  3. Bash Command 1: find

    GNU find searches the directory tree rooted at each given starting-point by evaluating the given exp ...

  4. [LOJ#515]「LibreOJ β Round #2」贪心只能过样例

    [LOJ#515]「LibreOJ β Round #2」贪心只能过样例 试题描述 一共有 \(n\) 个数,第 \(i\) 个数 \(x_i\) 可以取 \([a_i , b_i]\) 中任意值. ...

  5. 算法复习——区间dp

    感觉对区间dp也不好说些什么直接照搬讲义了2333 例题: 1.引水入城(洛谷1514) 这道题先开始看不出来到底和区间dp有什么卵关系···· 首先肯定是bfs暴力判一判可以覆盖到哪些城市····无 ...

  6. 浅谈android反调试之 API判断

    反调试:利用Java层API来判断Android程序是否是处于被调试下. 1.直接调用系统的android.os.Debug.isDebuggerConnected()方法 我们进行动态调试的时候,其 ...

  7. Mysql之Handler_read%

    纯属自己理解,如有误导概不负责O(∩_∩)O 加索引: mysql> flush status; Query OK, rows affected (0.00 sec) mysql> flu ...

  8. 如果dom节点是动态添加进页面的,在页面节点绑定事件如何解决的问题。

    如果dom节点是动态添加进页面,想在节点绑定事件,传统的做法就是遍历节点,但会出现问题,也肯能有其他的办法,突然想到 可以依据事件冒泡,这样就不惧页面后添加节点而不响应事件的问题.比较结实.示例代码如 ...

  9. 标准C程序设计七---34

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  10. svn的简单知识

    svn的简单知识 一.简介: SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统, 它的设计目标就是取代CVS.互联网上很多版本控制服务已从 ...