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. python自动安装python2.7

    #coding = utf-8 import os import sys if(os.getuid() == 0): pass else: print ("you are not root ...

  2. Spring整合Junit进行单元测试

    I. 加入依赖包 Spring Test (如spring-test-2.5.4.jar) JUnit 4 Spring 其他相关包 II.新建Junit Test Case III.读取配置文件 @ ...

  3. 使用ssh建立隧道和web代理

    动态端口转发(socket4/5代理): 通过ssh监听本地端口并把数据转发至远程动态端口 转发local port 至 ssh Server ssh -D ssh -qfTnN -D 本地目标端口 ...

  4. NOJ——1274The battle of Red Cliff(并查集按秩合并)

    [1274] The battle of Red Cliff 时间限制: 1000 ms 内存限制: 65535 K 问题描述 Zero loves palying Sanguo game very ...

  5. babel吐槽

    1. .babelrc文件无法复制 每次复制项目文件,.babelrc文件都会丢失,导致项目的ES6莫名的编译失败,最可能出现的错误就是Unexpected token import错误,import ...

  6. Java面试题之Java反射的原理

    什么是Java的反射? 在运行状态中,对于任意一个类,都能够知道这个类的属性和方法: 反射的作用? 如果给定一个类名,就可以通过反射机制来获取类的所有信息,也可以动态的创建对象和编译: 反射的原理? ...

  7. spring中MessageSource的配置使用方法3--ResourceBundleMessageSource

    ApplicationContext接口扩展了MessageSource接口,因而提供了消息处理的功能(i18n或者国际化).与HierarchicalMessageSource一起使用,它还能够处理 ...

  8. Crash的数字表格 BZOJ 2154 / jzptab BZOJ 2693

    jzptab [问题描述] 求: 多组询问 [输入格式] 一个正整数T表示数据组数 接下来T行 每行两个正整数 表示N.M [输出格式] T行 每行一个整数 表示第i组数据的结果 [样例输入] 1 4 ...

  9. Linux 设备驱动的固件加载【转】

    转自:http://blog.csdn.net/zqixiao_09/article/details/51106663 版权声明:本文为博主原创文章,未经博主允许不得转载. 作为一个驱动作者, 你可能 ...

  10. 命令行参数解析函数 getopt

    命令行参数解析函数 —— getopt() getopt()函数声明如下: #include <unistd.h> int getopt(int argc, char * const ar ...